2011-03-10 71 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。實體框架不支持唯一約束,所以我的假設是它將無法生成此數據庫模式。但是沒有什麼比這更簡單的了,那就試試吧。