Database design 生成意外表的实体框架约定

Database design 生成意外表的实体框架约定,database-design,entity-framework-5,conventions,fluent,Database Design,Entity Framework 5,Conventions,Fluent,我正在为一个用户可以注册课程的电子学习系统建模。一门课程可以由一系列内容或一系列包含内容的课程部分组成 我对模型的定义如下: 公共课 { [关键] public int CourseID{get;set;} //一对多关系 公共虚拟ICollection内容{get;set;} 公共虚拟ICollection CourseSections{get;set;} //多对多关系 公共虚拟ICollection用户{get;set;} } 公开课 { [关键] public int CourseSec

我正在为一个用户可以注册课程的电子学习系统建模。一门课程可以由一系列内容或一系列包含内容的课程部分组成

我对模型的定义如下:

公共课
{
[关键]
public int CourseID{get;set;}
//一对多关系
公共虚拟ICollection内容{get;set;}
公共虚拟ICollection CourseSections{get;set;}
//多对多关系
公共虚拟ICollection用户{get;set;}
}
公开课
{
[关键]
public int CourseSectionID{get;set;}
public int CourseID{get;set;}
公共虚拟ICollection内容{get;set;}
}
公开课内容
{
[关键]
公共int ContentID{get;set;}
//多对多映射
公共虚拟ICollection课程{get;set;}
公共虚拟ICollection CourseSections{get;set;}
}
初始化上下文后,我可以看到数据库中创建的两个表与我创建的模型不相关。以下两个表是意外创建的,我想了解原因:

ContentCourse:Content\u ContentID,Course\u CourseID

课程设置内容:课程设置\u课程设置ID,内容\u内容ID

当我注意到这两个表正在创建时,我决定通过添加以下两个模型为CourseContentSectionContent创建映射表:

公共类课程内容
{
[键,列(顺序=0)]
public int CourseID{get;set;}
[键,列(顺序=1)]
公共int ContentID{get;set;}
}
公开课内容
{
[键,列(顺序=0)]
public int CourseSectionID{get;set;}
[键,列(顺序=1)]
公共int ContentID{get;set;}
}

不幸的是,这些表仍在创建中。有人能从我的代码中看出我哪里出错了吗?任何帮助都将不胜感激。

你说的是一对多关系(
课程内容),但事实并非如此<代码>课程
和内容之间存在多对多关系

因此,表不是意外创建的。创建它们是因为在关系数据库中建模多对多关联的唯一方法是创建连接表。您会注意到,当您将现有的
内容
项添加到例如
课程.内容
,EF将在
内容课程
中插入记录,而不是在
课程
中或在
内容
中插入记录

您自己定义的类与您的类模型中的任何其他类都不相关。因此,EF不会为它们创建表,如果创建了,它们将只是断开连接的表

如果您决定将连接表合并到您的概念模型(=类模型)中,那么该模型将不得不进行一些更改。例如,对于
CourseContent

公共类课程内容
{
[键,列(顺序=0)]
public int CourseID{get;set;}
[外键(“CourseID”)]
公共虚拟课程{get;set;}
[键,列(顺序=1)]
公共int ContentID{get;set;}
[外键(“ContentID”)]
公共虚拟内容{get;set;}
}
公共课
{
[关键]
public int CourseID{get;set;}
//一对多关系(现在是)
公共虚拟ICollection内容{get;set;}
...
}
公开课内容
{
[关键]
公共int ContentID{get;set;}
//多对多映射
公共虚拟ICollection课程{get;set;}
...
}

如果您想保留多对多关联,但又想控制连接表的名称,可以使用中的流畅映射。

干杯Gert good man帮助我:)知道我在某个地方遗漏了一个关键步骤!!