【问题标题】:Entity Framework 4.1 Code First: Many to many with ICollection on only one entityEntity Framework 4.1 Code First:多对多,ICollection 仅在一个实体上
【发布时间】:2011-08-13 20:32:42
【问题描述】:

鉴于这些类,使用 EF 4.1 Code First,这将(按照惯例)在 Page 和 Tag 之间保留多对多关系:

public interface ITaggable
{
  ICollection<Tag> { get; set; }
}

public class Page : ITaggable
{
  public virtual ICollection<Tag> { get; set; }
}

public class Tag
{
  public virtual ICollection<Page> { get; set; }
}

由于我有很多其他类,它们实现了ITaggable,所以我必须将所有这些集合添加到Tag

public class Tag
{
  public virtual ICollection<Page> { get; set; }
  public virtual ICollection<Post> { get; set; }
  public virtual ICollection<Event> { get; set; }
  ...
}

如果我在Tag 上省略这些属性,则 EF 会生成一对多关系。有没有办法在Tag 上省略ICollection&lt;T&gt; 并获得多对多关系?

(备注:Tag 上的ICollection&lt;ITaggable&gt; 不起作用。)

【问题讨论】:

    标签: entity-framework mapping many-to-many ef-code-first entity-framework-4.1


    【解决方案1】:

    你必须使用流畅的映射:

    public interface ITaggable
    {
      ICollection<Tag> { get; set; }
    }
    
    public class Page : ITaggable
    {
        ...
        public virtual ICollection<Tag> Tags { get; set; }
    }
    
    public class Tag
    {
        ...
    }
    
    public class Context : DbContext
    {
        public DbSet<Tag> Tags { get; set; }
        public DbSet<Page> Pages { get; set; }
    
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Page>()
                        .HasMany(p => p.Tags)
                        .WithMany();
        }
    }
    

    【讨论】:

    • 奇怪,以前试过,但没有用。似乎没有重新创建数据库...无论如何,您的解决方案都可以正常工作。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-17
    • 2011-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    相关资源
    最近更新 更多