1

給定這些類,使用EF 4.1代碼優先,這將(按慣例)留在Page和Tag之間的多對多關係中:實體框架4.1代碼優先:多對多ICollection只有一個實體

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生成1-一對多的關係。有沒有辦法在Tag上忽略ICollection<T>並得到多對多的關係呢?

(備註:ICollection<ITaggable>Tag不工作)

回答

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(); 
    } 
} 
+1

奇怪,試過之前,但沒有奏效。好像數據庫沒有被重新創建......無論如何,你的解決方案的工作原理與它應該完全一樣。謝謝! – davehauser 2011-04-27 13:41:08

相關問題