2017-05-17 2 views
0

ich mit Datenbank erster AnsatzHolen Sie sich das Kind Klasse Propert in Parent-Klasse

SampCutReqMaster.CS

public partial class SampCutReqMaster 
    { 
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")] 
     public SampCutReqMaster() 
     { 
      this.SamCutAssignmentMasters = new HashSet<SamCutAssignmentMaster>(); 
     } 

     public decimal SampCutreqID { get; set; } 
     public Nullable<decimal> BuyerID { get; set; } 
     public Nullable<decimal> PatternRefID { get; set; } 
     public Nullable<decimal> PatternStyleID { get; set; } 
     public Nullable<decimal> SampleTypeID { get; set; } 


     public virtual BuyerMaster BuyerMaster { get; set; } 
     public virtual PatternStyle PatternStyle { get; set; } 
     public virtual PatterRefMaster PatterRefMaster { get; set; } 
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] 
     public virtual ICollection<SamCutAssignmentMaster> SamCutAssignmentMasters { get; set; } 
     public virtual SampleType SampleType { get; set; } 
    } 

und das nächste ist

ein zwei Controller in meiner Anwendung hatte

SamCutAssignmentMaster

public partial class SamCutAssignmentMaster 
    { 
     public decimal CutAssignID { get; set; } 
     public decimal SampCutreqID { get; set; } 
     public System.DateTime ReceivedDate { get; set; } 
     public string ReceivedBy { get; set; } 
     public Nullable<decimal> PatternMasterID { get; set; }     

     public virtual PatternMaster PatternMaster { get; set; } 
     public virtual SampCutReqMaster SampCutReqMaster { get; set; } 
    } 

ich einen Controller mit einer Indexansicht für SampCutReqMaster geschaffen hatte

public class SampCutReqMastersController : Controller 
    { 
     private ArtEntities db = new ArtEntities(); 
    // GET: SampCutReqMasters 
    public ActionResult Index() 
     { 
      var sampCutReqMasters = db.SampCutReqMasters.Include(s => s.BuyerMaster).Include(s => s.PatternStyle).Include(s => s.PatterRefMaster).Include(s => s.SampleType).Include(s=>s.SamCutAssignmentMasters); 

      var sampCutReqMasterssort = sampCutReqMasters.ToList().OrderByDescending(a => a.AddedDate); 
      return View(sampCutReqMasterssort.ToList()); 
     } 
} 

ich die „receivedBy“ von SamcutAssignmentMaster (Kinderklasse) aus meiner Sicht von SamCutReqMaster (Parent) .Aber es kann erhalten möchten keine Daten in SamcutAssignmentMaster relavant zu SamCutReqMaster sein (FK ist SamCutReqID)

im Index Ansicht im Folgenden werde ich zugreifen müssen SamcutAssignmentMaster.receivedBy

@model IEnumerable<WebArtSampler.Models.SampCutReqMaster> 

@{ 
    ViewBag.Title = "Index"; 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
} 

<h2>Index</h2> 

<p> 
    @Html.ActionLink("Create New", "Create") 
</p> 
<table class="table"> 
    <tr> 
     <th> 
      @Html.DisplayNameFor(model => model.ReqNum) 
     </th> 
     <th> 
      @Html.DisplayNameFor(model => model.Fabric) 
     </th> 
     <th> 
      @Html.DisplayNameFor(model => model.SampleRequiredDate) 
     </th> 
     <th> 
      @Html.DisplayNameFor(model => model.AddedDate) 
     </th> 
     <th> 
      @Html.DisplayNameFor(model => model.AddedBy) 
     </th> 
     <th> 
      @Html.DisplayNameFor(model => model.BuyerMaster.BuyerName) 
     </th> 
     <th> 
      @Html.DisplayNameFor(model => model.PatternStyle.StyleName) 
     </th> 
     <th> 
      @Html.DisplayNameFor(model => model.PatterRefMaster.PatterRefNum) 
     </th> 
     <th> 
      @Html.DisplayNameFor(model => model.SampleType.SampleType1) 
     </th> 
     <th> 
      @Html.DisplayNameFor(model => model.SizeDetail) 
     </th> 
     <th> 
      @Html.DisplayNameFor(model => model.Qty) 
     </th> 
     <th></th> 
    </tr> 

@foreach (var item in Model) { 
    <tr> 
     <td> 
      @Html.DisplayFor(modelItem => item.ReqNum) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.Fabric) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.SampleRequiredDate) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.AddedDate) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.AddedBy) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.BuyerMaster.BuyerName) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.PatternStyle.StyleName) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.PatterRefMaster.PatterRefNum) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.SampleType.SampleType1) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.SizeDetail) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.Qty) 
     </td> 

     <td> 
      @Html.ActionLink("Edit", "Edit", new { id=item.SampCutreqID }) | 
      @Html.ActionLink("Details", "Details", new { id=item.SampCutreqID }) | 
      @Html.ActionLink("Delete", "Delete", new { id=item.SampCutreqID }) 
     </td> 
    </tr> 
} 

</table> 
+0

Bitte zeigen Sie uns echten Arbeitscode. Dies wird nie kompilieren –

+0

Wissen Sie, was eine partielle Klasse ist? Es hat nicht viel mit Vererbung zu tun – Mardoxx

+0

@Mardoxx Ich weiß .. Aber ich bin in der Lage, Werte von fast allen anderen virtuellen Klasseneigenschaften zu erhalten. wie item.PatterRefMaster.PatterRefNum in Sicht. Ich bin nicht in der Lage, nur auf Eigenschaften von SamCutAssignmentMasters zuzugreifen, die in ICollection public virtual ist ICollection SamCutAssignmentMasters {get; einstellen; } –

Antwort

1

Ok. Sie können nicht auf die Eigenschaften zugreifen, während Ihr Typ immer noch die Schnittstelle ICollection ist. Sie müssen es in einen konkreten Typ umwandeln, bevor Sie über einen Index auf die Eigenschaften der Sammlung zugreifen können.

Übergeben Sie den Typ an eine Liste wie oben und Sie sollten die Eigenschaften sehen.

HINWEIS: Sie verwenden DisplayFor in Ihrer Ansicht. Wenn Sie beabsichtigen, den Inhalt dieser Ansicht zu posten, wird das Modell nicht gebunden, es sei denn, Sie haben ein verborgenes Steuerelement für jedes Element oder Sie wechseln zu TextBoxFor. Sie benötigen auch die for (Counter) -Syntax, um Objekte in Sammlungen zu binden.

Hoffnung, das hilft.

+0

Thanks Wheels zum "receivedby" kommen kann. Ich brauche es nur zum Zweck der Anzeige und ich werde nicht veröffentlichen. Ich hatte einige Änderungen vorgenommen und es innerhalb der Ansicht verwendet. @ Html.DisplayFor (x => ((Liste ) item.SamCutAssignmentMasters) [i] .ReceivedBy) Aber Fehler erhalten Weitere Informationen: Kann nicht Umwandeln des Objekts vom Typ 'System.Collections.Generic.HashSet'1 [WebArtSampler.Models.SamCutAssignmentMaster]' in den Typ –

+0

@SreenathGanga - Gibt es einen Grund für das HashSet? Dadurch wird sichergestellt, dass in der ICollection keine Duplikate vorhanden sind. Sie legen die SamCutAssignmentMasters auf einen neuen HashSet, wenn Sie den Konstruktor für SampCutReqMaster aufrufen. Vielleicht verwenden Sie einfach eine Liste, um mit zu beginnen, wenn Sie keine besonderen Einschränkungen zu erzwingen haben? – Wheels73