繁体   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