Sql server Db优先方法,表中的复合主键,EF不为该表创建实体

Sql server Db优先方法,表中的复合主键,EF不为该表创建实体,sql-server,entity-framework,Sql Server,Entity Framework,在实体框架DB-first方法中,我在DB表中有两列,它们是复合主键。当我为该数据库创建实体框架时,该表不会显示为实体。要创建复合主键,可以添加数据注释[key,Column(Order=0)] 您还可以使用fluentapi 如果它是数据库中的一个连接表(用于实现多对多关系),那么在数据库优先方法中,它将不会作为实体在edmx中可见 多对多关系() 学生和课程有一个以*多重性为标志的多对多关系。这意味着一个学生可以注册许多课程,而且一门课程可以教给许多学生 数据库包括StudentCourse

在实体框架DB-first方法中,我在DB表中有两列,它们是复合主键。当我为该数据库创建实体框架时,该表不会显示为实体。

要创建复合主键,可以添加数据注释
[key,Column(Order=0)]

您还可以使用fluentapi

如果它是数据库中的一个连接表(用于实现多对多关系),那么在数据库优先方法中,它将不会作为实体在edmx中可见

多对多关系()

学生课程有一个以*多重性为标志的多对多关系。这意味着一个学生可以注册许多课程,而且一门课程可以教给许多学生

数据库包括StudentCourse联接表,其中包括两个表的主键(“Student和Course表”)。实体框架通过在CSDL和可视化设计器中没有连接表的实体集(DbSet属性)来表示多对多关系。相反,它通过映射来管理这一点

注意:只有当联接表(本例中为StudentCourse)不包含除两个表的PKs以外的任何列时,实体框架才支持多对多关系。如果联接表包含其他列,例如DateCreated,则EDM也会为中间表创建一个实体,并且您必须手动管理多对多实体的CRUD操作



还要注意的是,在我们的模式中,link(aka Junction)表没有表示为实体。当它没有有效负载时(即它没有标量属性)。如果我们有一个有效负载,我们不应该有多对多关系,但我们应该有一对多关系的第四个实体。有关更多信息,请参阅

我认为此解决方案适用于代码优先方法,我使用的是EF的DB优先方法,
public class Person
{
  [Key, Column(Order = 0)]
  public string ID{ get; set; }

  [Key, Column(Order = 1)]
  public int IDTwo { get; set; }
}