2011-02-12 69 views
2

我在我的數據庫C#ADO.NET插入新行使用默認值

表項目
ProjectId (int), ProjectName (varchar(50)), ProjectCreationDate(datetime2(7))

專案編號有這個表是身份
項目名是沒有默認值
非空允許 ProjectCreationDate有一個默認綁定(sysdatetime())

我創建一個ADO.NET EDM並嘗試插入表


using (ProjectEntities context = new ProjectEntities()){ 
    Project p = Project{ 
     ProjectName = "ADO" 
    }; 

    context.Projects.AddObject(p); 
    context.SaveChanges(); 
} 

問題是ProjectCreationDate列填充了0001-01-01 00:00:00.0000000而我期待當前時間將由數據庫本身填充。

我有我的數據庫中的其他表與默認值綁定和值將稍後更改一。所以設置StoreGeneratedPattern = "computed"不是我尋找的解決方案。

任何想法?

回答

1

這可能不是你想聽到的,但解決方案之一是在構造函數中定義的默認值:

public partial class Project 
{ 
    public Project() 
    { 
     ProjectCreationDate = DateTime.Now; 
    } 
} 
+0

我很害怕,但無論如何感謝。我不知道爲什麼ADO.NET不會僅僅在屬性沒有在應用程序端設置的情況下將字段保留爲默認值綁定。 – nobody 2011-02-12 02:15:59

+0

@秦:因爲你可能想在這個字段中放置'null'值。 – LukLed 2011-02-12 02:18:19

1

LukLed先生是正確的,或者如果你想添加默認值,或在表綁定。

right click your table name(Table Project) 
, choose Design 
,Click on your Column Name(ProjectCreationDate) that you want to create default value 
On Column Properties, click on Default value or binding then add input 
getdate(). 

它會在您每次插入數據時填充ProjectCreationDate。

問候。

1

如果您始終希望使用sysdatetime()設置值,那麼您可以在實體模型中使「Setter」爲私有。模型不會嘗試填充字段,並且數據庫提供的默認值將填充到表中。

0

StoreGeneratedPattern =身份或計算是訣竅。