簡體   English   中英

在3個實體之間創建導航屬性

[英]Creating navigation property between 3 entities

我嘗試在3個實體之間創建映射。

[Table("ContentItem")]
public class ContentItem
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int ID { get; set; }

    public virtual Page Page { get; set; }

    [Column("PageID")]
    public int PageID { get; set; }

    public virtual ContentType ContentType { get; set; }

    [Column("ContentTypeID")]
    public int ContentTypeID { get; set; }

    public int ItemID { get; set; }
}

[Table("ContentType")]
public class ContentType
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int ID { get; set; }

    public string Name { get; set; }

    [ForeignKey("ID")]
    public virtual HTMLContent HtmlContent { get; set; }    
 }

[Table("HTMLContent")]
public class HTMLContent
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    [Column("ID")]
    public int ID { get; set; }

    public string Content { get; set; }

    public int SortOrder { get; set; }

    [Column("PageID")]
    public int PageID { get; set; }

    [Column("ContentTypeID")]
    public int ContentTypeID { get; set; }

    public virtual ContentType ContentType { get; set; }
}

我目前有使用Fluent API映射的ContentType和HTMLContent之間的關系,如下所示:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    // http://weblogs.asp.net/shijuvarghese/archive/2011/10/06/removing-edmmetadata-table-in-ef-code-first.aspx
    // We don't need the EdmMetadata table in the DB
    modelBuilder.Conventions.Remove<IncludeMetadataConvention>();

    modelBuilder.Entity<ContentType>().HasRequired(b => b.HtmlContent);

}

現在使用Linq這樣訪問HTMLContent:

var contentItems = cmsUnitOfWork.ContentItems.Find().Where(x => x.PageID == 1).ToList();

我可以在視圖中訪問HTMLContent:

@model IEnumerable<H2O.Domain.CMS.Models.ContentItem>

@foreach(var x in Model)
{
    <div id="ContentItem@(x.ID)">
    <strong>@x.ContentType.HtmlContent.Content
    </div>
}

但是,它只是給我數據庫中的第一HTMLContent行。 我想返回ID對應於ContentItem Entity中ItemID成員的HTMLContent。 由於ItemID可能來自HTMLContent以外的其他ID,因此我無法映射直接外鍵。 我該如何使用實體?

我本人對該MVC還是陌生的,但我想我可以看到您需要做的事情。 您可能需要查看創建視圖模型。 可以嘗試構建一個針對您的特定需求的類,而不是嘗試訪問MVC中尚未實現的嵌套對象。

像這樣的東西:

 public class ViewHtmContentAndContentItem
    {
      public ContentItem contentItems {get; set;}
      public HTMLContent HtmlContentItems {get; set;}
    }

現在,當您執行Linq查詢時,可以在兩個表中的PageIdPageId兩個表,然后將此對象返回到您的View。

在此表單中,您可以訪問所需的任何屬性。

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM