2011-06-08 91 views
10

我有這樣實體框架 - 使用數據註釋屬性的默認值

public class MyModel 
{ 
    public int MyModelId { get; set; } 
    public string Name { get; set; } 
    public string Description { get; set; } 
    public string Title { get; set; } 
} 

一個模式,我在想,如果有一種方法,使用數據註釋,設置屬性的值 - 比如標題 - 默認到其他財產價值,即名稱。喜歡的東西:

if(MyModel.Title == "") MyModel.Title = MyModel.Name; 
+0

可能的杜佩:http://stackoverflow.com/questions/40730/how-do-you-give-ac-auto-property-a-default-value – Prescott 2011-06-08 01:43:07

+0

我試圖用數據註釋實現這一點,雖然我不不認爲這是可能的。無論如何,我不認爲這是一個騙局。 – noinstance 2011-06-08 01:47:40

+0

這不完全相同,但如果你閱讀答案和評論,你會看到他們回答你的問題 – Prescott 2011-06-08 01:51:26

回答

4

你可以告訴實體框架,數據庫將通過編輯EDMX文件的SSDL,物業照顧該屬性的。

最初

<Property Name="CompanyName" Type="nvarchar" Nullable="false" MaxLength="40" />

我們必須通過設置storeGeneratedPattern = 「計算」我們可以告訴EF該屬性值將其更改爲

<Property Name="CompanyName" Type="nvarchar" Nullable="false" MaxLength="40" StoreGeneratedPattern="Computed" />

由DB插入。

進行編輯SSDL

  1. 右鍵單擊該文件EDMX,用XML(文本)編輯器中打開。物業

2.Ctrl + F名字,只是改變財產

我不知道有沒有辦法做數據註解。

10

如果您希望將默認值設置爲實體默認(無參數)構造函數。不需要爲可以直接執行的操作提供數據註釋。

+1

將非空列添加到包含記錄的現有表時默認值很有用。我正在尋找一種方法來解決這個問題 - 是否有一種方法來指定要填充所有現有記錄的值? – Crake 2012-08-17 01:16:07

+4

@Crake這應該可能是它自己的單獨問題,但我可以在我的數據遷移中使用'defaultValueSql'完成此操作:'AddColumn(「ExistingTable」,「NewColumn」,c => c.Int(nullable:false, defaultValueSql:「0」));'(根據需要更改類型和默認值) – snumpy 2012-08-22 17:22:19

+0

謝謝,這對我有用! – Crake 2012-08-22 21:04:45

0

這是不可能的設置屬性參數作爲一般的函數,你會得到一個錯誤:

「的屬性參數必須是常量表達式,屬性參數類型的typeof表達式或數組創建表達式」