实体框架4.1代码优先:在一个实体上只有ICollection的多对多

dav*_*ser 1 mapping many-to-many entity-framework ef-code-first entity-framework-4.1

给定这些类,使用EF 4.1 Code First,这将(按照惯例)留给页面和标记之间的多对多关系:

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; }
}
Run Code Online (Sandbox Code Playgroud)

由于我有一堆其他类,实现ITaggable我必须将所有这些集合添加到Tag:

public class Tag
{
  public virtual ICollection<Page> { get; set; }
  public virtual ICollection<Post> { get; set; }
  public virtual ICollection<Event> { get; set; }
  ...
}
Run Code Online (Sandbox Code Playgroud)

如果我在TagEF 上省略这些属性会产生一对多的关系.有没有办法离开了ICollection<T>Tag并获得了许多一对多的关系呢?

(备注:ICollection<ITaggable>on Tag不起作用.)

Lad*_*nka 5

你必须使用流畅的映射:

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();
    }
}
Run Code Online (Sandbox Code Playgroud)