Entity framework 我可以让实体框架(模型优先)生成复合键吗?

Entity framework 我可以让实体框架(模型优先)生成复合键吗?,entity-framework,composite-key,Entity Framework,Composite Key,我正在使用实体框架的“模型优先”方法设计一个数据库。基于此,我对部分DB采用了超级类型/子类型模式 此模式需要基于至少2个表中的2列的复合键(请参见下面的模式) 我在论坛上搜索了“实体框架”和“复合键”,但我发现的问题都不在这个更基本的层面上: 我是否可以设置一个实体模型,以便它生成一个表(使用“从模型生成数据库…”),在两列上有一个复合主键,这样一个是第二个表上的外键?在另一个表中,除了FK是基于第一个表中的2列之外,其他情况都是相同的 或者,让EF生成dbw/o复合键,然后进入sqlserv

我正在使用实体框架的“模型优先”方法设计一个数据库。基于此,我对部分DB采用了超级类型/子类型模式

此模式需要基于至少2个表中的2列的复合键(请参见下面的模式)

我在论坛上搜索了“实体框架”和“复合键”,但我发现的问题都不在这个更基本的层面上: 我是否可以设置一个实体模型,以便它生成一个表(使用“从模型生成数据库…”),在两列上有一个复合主键,这样一个是第二个表上的外键?在另一个表中,除了FK是基于第一个表中的2列之外,其他情况都是相同的

或者,让EF生成dbw/o复合键,然后进入sqlserver,(重新)设置主键,删除模型,并基于新实例化的数据库创建一个新模型,这样更好吗?当然,我知道怎么做;但是,由于我仍在计算DB结构中的一个或两个小细节,我更愿意推迟任何实质上会导致DB结构在此时烘焙的事情

下面是推荐的超级类型/子类型结构,我已经在实体模型中镜像了它(还没有弄清楚如何生成复合键):


我没有试过,但我想你不能先用模型来创建它。原因是第一个表正在使用唯一约束,而第二个和第三个表正在基于该约束构建FK。实体框架不支持唯一约束,所以我的假设是它将无法生成此DB模式。但没有什么比简单地尝试更容易的了

CREATE TABLE publications (
  pub_id INTEGER NOT NULL PRIMARY KEY,
  pub_type CHAR(1) CHECK (pub_type IN ('A', 'B', 'P', 'S')),
  pub_url VARCHAR(64) NOT NULL UNIQUE,
  CONSTRAINT publications_superkey UNIQUE (pub_id, pub_type)
);


CREATE TABLE articles (
  pub_id INTEGER NOT NULL,
  pub_type CHAR(1) DEFAULT 'A' CHECK (pub_type = 'A'),
  placeholder CHAR(1) NOT NULL, -- placeholder for other attributes of articles
  PRIMARY KEY (pub_id, pub_type),
  FOREIGN KEY (pub_id, pub_type) REFERENCES publications (pub_id, pub_type)
);

CREATE TABLE stories (
  pub_id INTEGER NOT NULL,
  pub_type CHAR(1) DEFAULT 'S' CHECK (pub_type = 'S'),
  placeholder CHAR(1) NOT NULL, -- placeholder for other attributes of stories
  PRIMARY KEY (pub_id, pub_type),
  FOREIGN KEY (pub_id, pub_type) REFERENCES publications (pub_id, pub_type)
);