我正在处理代码,在完成代码之前我无法运行,因为这是一个漫长而乏味的过程。我的任务是向现有数据库添加一个新表,更新模型的.edmx并编写一个方法,通过c#后端代码向表中添加新行。
在我的情况下,我的表上有2个默认约束
SomeTable
------------
ID INT IDENTITY (1,1) PRIMARY KEY CLUSTERED,
SomeDate DATETIME2 NOT NULL DEFAULT GETDATE(),
SomeOtherField VARCHAR(1024) NOT NULL DEFAULT ''
使用此表的.edmx模型,我将SomeDate的StoreGeneratedPattern
设置为Computed
。我还在SSDL
中手动对其进行了双重检查,以确保computed StoreGeneratedPattern
实体中SomeDate
字段上的SomeTable
属性。
据我所知,并且不确定,当我有以下代码时
public void AddSomeRow(...)
{
SomeDbContext context = new SomeDbContext;
var table = new SomeTable { SomeOtherField = "Value" };
context.SomeTables.Add(table);
context.SaveChanges();
}
我相信SomeDate
字段会被设置为默认约束(因为它没有填充在实体中)。 这是真的吗?
执行上面列出的SomeOtherField
,相同的步骤,我仍然可以手动给它一个值(显示在该字段中的值而不是默认约束)或省略它(默认约束将被设置)进入那个领域)?
这个问题很难解释,如果它没有意义,我道歉
答案 0 :(得分:4)
StoreGeneratedPattern
表示该值始终由DB生成,因此您不允许对其进行修改。即只有DB计算列才有意义。
至少在EF 6.1之前,没有直接的方法来支持数据库默认值。您唯一能做的就是将默认值移出数据库并在模型(或代码优先)方面生成它们。您会发现一些工作 - 但在某些情况下它们并不安全(特别是对于N层应用程序)。