2013-03-20 57 views
3

有沒有辦法讓實體框架在插入上使用SQL默認值,但是卻允許更新字段。我們有一個SQL表具有標識列「id」和另一列設置爲ident_current(「table」)的實例。我知道以默認值插入字段的唯一方法是將該字段設置爲DatabaseGenerated(DatabaseGeneratedOption.Computed),以便在插入時忽略它。但是,通過擁有該屬性,我們無法對列進行更新。它也是一個自引用的外鍵,所以我們不能做插入,然後立即更新來解決問題。不要問我爲什麼桌子是這樣設計的 - 就像它之前設置的方式一樣,所以我們現在仍然堅持。我們設置的一個簡單的示意圖如下:插入時實體框架數據庫默認允許更新

DomainClass:

Class1 { 
    public int id {get;set;} 
    [DatabaseGenerated(DatabaseGeneratedOption.Computed)] 
    public int id2 {get;set;} 
    public string Name {get;set;} 
} 

SQL(僞):

Table (
    id INT which is an identity(1,1) column, 
    id2 INT NOT NULL with a default value of ident_current("table") 
    Name nvarchar(50) 
) 

我們希望通過EF產生的插入語句是:

INSERT INTO Table(Name) VALUES('Name') 

並更新爲:

UPDATE table 
SET id2 = *somenumber*, name = 'Name' 

非常感謝所有的幫助。如果需要,我們使用EF 4.3.1.0。

回答

0

有沒有辦法AFAIK。見thisthat

第一個鏈接指向使用序列作爲主鍵的建議,這看起來像是您可能想要做的事情,而不是您的示例代碼。

第二個鏈接指向關於默認值的一般處理的建議,目前也不支持該默認值,但這是另一個增加對所需內容支持的潛在起點。

+0

儘管此鏈接可能會回答問題,但最好在此處包含答案的基本部分,並提供供參考的鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 – bummi 2013-11-05 18:19:41

+0

@bummi:感謝您的評論,我更新了答案,試圖傳達鏈接建議的要點。但請注意,因爲它們僅僅是對框架的建議,所以它們不是答案的一部分(其非常簡單地爲「否」),只是具有潛在興趣的指針。 – tne 2013-11-05 18:27:35

相關問題