2017-12-17 4 views
0

ich die folgenden Klassen in meinem ProjektEager Laden Nicht für Kinder Klasse Abrufen von Daten MVC

public class PolicyDocs 
{ 
    [Key] 
    [Required] 
    [MaxLength(20)] 
    public string PolicyDocID { get; set; } 
    [DisplayName("Date Revised")] 
    public DateTime DateRevised { get; set; } 

    [MaxLength(500)] 
    [DisplayName("Document Name")] 
    public string DocumentName { get; set; } 

    [MaxLength(10)] 
    [DisplayName("Version")] 
    public string VersionNo { get; set; } 

    [MaxLength(255)] 
    [DisplayName("Location")] 
    public string DocumentPath { get; set; } 

    public string CategoryID { get; set; } 
    public ICollection<PolicyDocumentsCatagory> PolicyDocumentsCatagory { get; set; } 
} 

und

public class PolicyDocumentsCatagory 
{ 
    [Key] 
    [MaxLength(20)] 
    //[Required] 
    public string CategoryID { get; set; } 

    [MaxLength(20)] 
    [Required] 
    [DisplayName("Description")] 
    public string CategoryDesc { get; set; } 

    [DisplayName("Active")] 
    public Boolean IsActive{ get; set; } 

} 

Daten richtig in geladen wird auf die Tabelle definiert haben. Beispiel:

PolicyDocs: 
1 ,"12-Jan-2017", "Document 1","version 1",100 

PolicyDocumentsCategory: 
100, "Information Technology", "true". 

Ich verwende die folgende Abfrage in meinem Controller-Klasse

_context = new ApplicationDbContext(); 
     //PolicyDocs _Policy = new PolicyDocs(); 
     var _LPolicies = _context.PolicyDocs.Include(i=> i.PolicyDocumentsCatagory).ToList(); 
     return PartialView("_GetAllPolicies", _LPolicies); 

Während die Abfrage ausgeführt wird, vermag ich nicht alle Daten zu sehen, für PolicyDocumentsCategory geladen in „_LPolicies“ Objekt. Die Abfrage lädt Daten in der Tabelle "PolicyDocs".

Noch kann ich die PolicyDocumentsCategory in VIEW verweisen. Ich kann nicht die Eigenschaften von „PolicyDocumentsCatagory“ in der

@model IEnumerable< MyRTOCloud.DBModels.PolicyDocs> 
<div class="row"> 
    <div> 
     <table id="Categories" class="table table-hover"> 
      <thead> 
       <th>Category</th> 
       <th>Document Name</th> 
       <th>Release Date</th> 
       <th>Version</th> 
      </thead> 
      @foreach (var lp in Model) 
      { 
      <tr> 
       <td>@lp.PolicyDocumentsCatagory.____</td> // I can not see any peroprty of "PolicyDocumentsCatagory" 

       <td>@lp.DocumentName </td> 
       <td>@lp.DateRevised </td> 
       <td>@lp.VersionNo </td> 
      </tr> 
      } 
     </table> 
    </div> 
</div> 

Dank Blick sehen,

+0

ist die Beziehung richtig zugeordnet? Wie wird die Abfrage generiert? – DevilSuichiro

Antwort

0

PolicyDocumentsCatagory eine Sammlung ist, und Sie müssen durchlaufen sie in sich selbst oder in Ihrem Fall, dass Sie mit einem Separator als ein kombinieren Zeichenfolge.

Also, versuchen Sie so etwas;

<td>@string.Join(",", lp.PolicyDocumentsCatagory.Select(x => x.CategoryID))</td> 
0

Ihre PolicyDocs Klasse einen einzigen CategoryID führt mich dies anzunehmen, verweist auf eine Eins-zu-viele-Beziehung (PolicyDocs die viele zu sein, PolicyDocumentsCatagory, derjenige zu sein). Wenn dies der Fall ist, möchten Sie Ihre PolicyDocumentsCatagory Eigenschaft in PolicyDocs zu public virtual PolicyDocumentsCatagory PolicyDocumentsCatagory { get; set; } ändern. Beachten Sie den virtual Teil. Dies ermöglicht EF, die Beziehungseigenschaft automatisch zu füllen.

0
public class PolicyDocs 
{ 
    [Key] 
    [Required] 
    [MaxLength(20)] 
    public string PolicyDocID { get; set; } 

    [DisplayName("Date Revised")] 
    public DateTime DateRevised { get; set; } 

    [MaxLength(500)] 
    [DisplayName("Document Name")] 
    public string DocumentName { get; set; } 

    [MaxLength(10)] 
    [DisplayName("Version")] 
    public string VersionNo { get; set; } 

    [MaxLength(255)] 
    [DisplayName("Location")] 
    public string DocumentPath { get; set; } 

    public ICollection<PolicyDocumentsCatagory> PolicyDocumentsCatagory { get; set; } 
} 

public class PolicyDocumentsCatagory 
{ 
    [Key] 
    [MaxLength(20)] 
    public string CategoryID { get; set; } 

    [Required] 
    [MaxLength(20)] 
    public string PolicyDocID { get; set; } 
    [ForeignKey] 
    public PolicyDocs PolicyDocs { get; set; } 

    [MaxLength(20)] 
    [Required] 
    [DisplayName("Description")] 
    public string CategoryDesc { get; set; } 

    [DisplayName("Active")] 
    public Boolean IsActive{ get; set; } 
} 

Ihre Modelle sind nicht gültig. Sie müssen einen Fremdschlüssel in Ihrer PolicyDocumentsCatagory haben, der auf PolicyDocs verweist, und in den PolicyDocs ist keine CategoryID erforderlich.

One PolicyDocs hat viele PolicyDocumentsCatagory, während ein PolicyDocumentsCatagory nur ein PolicyDocs verwiesen wird. Standard 1 zu viele Beziehungstyp.