簡體   English   中英

實體框架中多對多關系中的多個實體

[英]Mutiple entities in a many to many relationship in Entity Framework

可以說我有3個班級:

public class Tag {
    public string Name { get; set; }
}

public class Post {
     public virtual IList<Tag> Tags { get; set; }
}

public class User {
     public virtual IList<Tag> Tags { get; set; }
}

現在,用戶和標簽以及帖子和標簽之間存在多對多的關系。

簡化:我有一個標簽列表,我希望能夠標記用戶和帖子,而標簽保持獨立。

現在,我可以創建一個地圖並將多個映射到多個,創建兩個表:Users_Tags和Posts_Tags,但我需要它們在同一個表中。

我需要一個:Entities_Tags:Entity_Id,Tag_Id,Descriminator

通常我會創建一個基類,Tag和Post都繼承自......“TagContainer”。 創建一個:TagContainers_Tags:TagContainer_Id,Tag_Id

現在的問題是,在我的情況下,在我想到的實體中,它們共享相同的基類是沒有意義的。 這是因為我有另一個基類做同樣的事情會發生沖突。 並且讓該類繼承其中一個基類對應用程序沒有意義。

如果EF支持接口,我當然會通過讓我的類繼承必要的接口來支持第一個和第二個多對多實體來解決這個問題。

我正在尋找一種方法讓EF支持基於多對多表的Discriminator,而不必為我的實體提供基類。

有什么建議么?

因此,您不能在兩個不同的多對多關系中使用該表。 如果你真的不想在模型和數據庫表中進行任何類型的泛化(盡管它在規范化大數據庫設計中最常見),你可以這樣做:

public class MyTrust
    {
        public MyTrust()
        {
            MyLocations = new List<MyLocation>();
        }
        public int MyTrustID { get; set; }
        public string MyTrustName { get; set; }
        public virtual ICollection<MyLocation> MyLocations { get; set; }
    }
    public class MyLocation
    {

        public int MyLocationID { get; set; }
        public string MyLocationName { get; set; }
        public virtual MyTrust MyTrust { get; set; }
}

public class TaskDbContext : DbContext
    {
        public DbSet<MyTrust> MyTrusts { get; set; }
        public DbSet<MyLocation> MyLocations { get; set; }
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<MyTrust>().HasMany(t => t.MyLocations).WithRequired();
        }
    }

這里查看樣本的來源

暫無
暫無

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

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