2

我正在使用实体框架的“模型优先”方法设计数据库。根据我在这里收到的优秀反馈,我正在为部分数据库采用超类型/子类型模式。

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

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

或者,让 EF 生成不带复合键的 DB,然后进入 SQL Server,(重新)设置主键,删除模型,并基于新实例化的数据库创建新模型会更好吗?我当然知道该怎么做;但由于我仍在处理 DB 结构中的一个或 2 个小细节,我宁愿推迟任何本质上会导致 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)
);
4

1 回答 1

3

我没有尝试过,但我认为您将无法先使用模型创建它。原因是您的第一个表正在使用唯一约束,而您的第二个和第三个表正在基于该约束构建 FK。实体框架不支持唯一约束,所以我的假设是它无法生成这个数据库模式。但没有什么比试一试更容易了。

于 2011-03-10T15:27:24.093 回答