首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实体框架-多对多关系

问实体框架-多对多关系
EN

Stack Overflow用户
提问于 2011-10-29 02:24:39
回答 1查看 2.2K关注 0票数 3

嗨,我尝试使用EF Fluent API的多对多关系。我有两节POCO课。

代码语言:javascript
复制
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>();
    }
}

我用这部分代码映射了多对多的关系:

代码语言:javascript
复制
        ////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。这是正确的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-10-29 06:56:33

通过反复试验,我发现了以下几点。给定两个类..。

代码语言:javascript
复制
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; }
}

...and没有流畅的映射和像这样的DbContext ...

代码语言:javascript
复制
public class MyContext : DbContext
{
    public DbSet<AClass> AClasses { get; set; }
    public DbSet<BClass> BClasses { get; set; }
}

创建的join表的...the名称为BClassAClasses.如果我改变了集合的顺序...

代码语言:javascript
复制
public class MyContext : DbContext
{
    public DbSet<BClass> BClasses { get; set; }
    public DbSet<AClass> AClasses { get; set; }
}

创建的连接表的...the名称将更改为AClassBClasses,并且表中键列的顺序也会更改。因此,连接表的名称和键列的顺序似乎取决于实体类被“加载”到模型中的顺序-可以是DbSet声明的顺序,如果涉及更多关系,则可以是另一个顺序-例如,引用AClass的其他实体。

最后,这根本无关紧要,因为这样的多对多关系是“对称的”。如果您想拥有自己的连接表名称,您可以在Fluent API中指定它,就像您已经做的那样。

因此,对于您的问题:是的,将连接表命名为AuthorProjects是正确的行为。但是,如果名称是ProjectAuthors,那么它也是正确的行为。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7933276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档