2011-03-10 48 views
2

我正在使用实体框架的“模型优先”方法设计数据库。根据这里的excellent feedback I recieved,我对数据库的一部分采用了超类型/子类型模式。我可以获得实体框架(模型优先)生成组合键吗?

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

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

或者,让EF生成没有组合键的数据库,然后进入SQL Server,(重新)设置主键,删除模型,&创建一个基于新实例化的数据库?当然,我知道该怎么做。但是由于我仍然在研究数据结构中的一个小细节或2个细节,所以我宁愿放弃任何基本上导致在此结构中烘焙数据库结构的东西。

以下是推荐的超类型/子式结构,这是我在我的实体模型已经镜像(W/O还没有搞清楚如何让产生的组合键):

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) 
); 

回答

3

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

相关问题