我正在使用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会知道该怎么办?
答案 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");
});
}