如何为EF6命名多个表,是否需要为此添加特殊映射?

时间:2014-01-20 17:37:10

标签: asp.net asp.net-mvc entity-framework many-to-many

我正在使用EF 6并尝试映射多对多的关系。到目前为止,我有:

public partial class ObjectiveDetail
{
    public ObjectiveDetail()
    {
        this.SubTopics = new List<SubTopic>();
    }
    public int ObjectiveDetailId { get; set; }
    public string Text { get; set; }
    public virtual ICollection<SubTopic> SubTopics { get; set; }
}

public partial class SubTopic
{
    public SubTopic()
    {
        this.ObjectiveDetails = new List<ObjectiveDetail>();
    }
    public int SubTopicId { get; set; }
    public int Number { get; set; }
    public string Name { get; set; }
    public virtual ICollection<ObjectiveDetail> ObjectiveDetails { get; set; }
}

我们的DBA将编写多对多表的代码。这应该如下 表名为ObjectiveDetailSubTopic或完全不同的东西?

CREATE TABLE [dbo].[ObjectiveDetailSubTopic] (
    [ObjectiveDetailId] INT NOT NULL,
    [SubTopicId]        INT NOT NULL
);

有人能告诉我这是否是创建表格的正确方法。我也必须这样做 添加一些代码将ObjectiveDetail和SubTopic类映射到新的连接类 EF会知道该怎么办?

1 个答案:

答案 0 :(得分:3)

  

我们的DBA将编写多对多表的代码。应该   这个如下,表名为ObjectiveDetailSubTopic或   完全不同的东西?

只要遵循SQL数据库表命名约定,表名就可以是任何内容。我通常通过连接两个表名来命名连接表。

要使用sql创建连接表,请参阅以下内容:

 CREATE TABLE [dbo].[ObjectiveDetailSubTopic](
        ObjectiveDetailSubTopicId int identity primary key,
        ObjectiveDetailId INT NOT NULL,
        SubTopicId  INT NOT NULL,
        foreign key(ObjectiveDetailId) references ObjectiveDetail(ObjectiveDetailId ),
        foreign key(SubTopicId) references SubTopic(SubTopicId )
    );

但您不需要自己创建连接表,Entity Framework会为您创建连接表。您只需要在DbContext类中映射与Fluent API的关系,如下所示:

   protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<ObjectiveDetail>().
            HasMany(c => c.SubTopics).
            WithMany(p => p.ObjectiveDetails).
            Map(m =>
                    {
                        m.MapLeftKey("ObjectiveDetailId ");
                        m.MapRightKey("SubTopicId ");
                        m.ToTable("ObjectiveDetailSubTopic");
                    });
    }