[英]entity framework - many to many relationship
您好,我嘗試與EF Fluent API使用多對多關系。 我有2個POCO課程。
public class Project
{
public int ProjectId { get; set; }
public virtual ICollection<Author> Authors { get; set; }
public Project()
{
Authors = new List<Author>();
}
}
public class Author
{
public int AuthorId { get; set; }
public virtual ICollection<Project> Projects { get; set; }
public Author()
{
Projects = new List<Project>();
}
}
我用這部分代碼映射了很多很多關系:
////MANY TO MANY
modelBuilder.Entity<Project>()
.HasMany<Author>(a => a.Authors)
.WithMany(p => p.Projects)
.Map(m =>
{
m.ToTable("ProjectAuthors");
m.MapLeftKey("ProjectId");
m.MapRightKey("AuthorId");
});
這在DB中創建了ProjectsAuthors表。 這是我對這種關系映射案例的第一次嘗試。
如果我省略了這個映射,它創建了具有類似模式的表AuthorProject。 這是正確的bevahior?
經過反復試驗,我發現了以下內容。 鑒於兩個班級......
public class AClass
{
public int Id { get; set; }
public ICollection<BClass> BClasses { get; set; }
}
public class BClass
{
public int Id { get; set; }
public ICollection<AClass> AClasses { get; set; }
}
...沒有像這樣的Fluent映射和DbContext ......
public class MyContext : DbContext
{
public DbSet<AClass> AClasses { get; set; }
public DbSet<BClass> BClasses { get; set; }
}
...創建的連接表的名稱是BClassAClasses 。 如果我改變集合的順序......
public class MyContext : DbContext
{
public DbSet<BClass> BClasses { get; set; }
public DbSet<AClass> AClasses { get; set; }
}
...創建的連接表的名稱更改為AClassBClasses ,表中的鍵列順序也會更改。 因此,連接表的名稱和鍵列的順序似乎取決於實體類“加載”到模型中的順序 - 如果有更多關系,則可以是DbSet
聲明的順序或其他順序涉及 - 例如一些其他實體AClass
。
最后,它根本不重要,因為這種多對多關系是“對稱的”。 如果您想擁有自己的連接表名稱,可以像以前一樣在Fluent API中指定它。
那么,對於您的問題:是的,命名連接表AuthorProjects
是正確的行為。 如果名稱是ProjectAuthors
那么它也是正確的行為。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.