我正在处理代码,在完成之前我无法运行,因为这是一个漫长而乏味的过程。我的任务是向现有数据库添加一个新表,更新模型的 .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
属性位于SomeTable
实体的SomeDate
字段中。
据我所知,并且不确定,当我有以下代码时
public void AddSomeRow(...)
{
SomeDbContext context = new SomeDbContext;
var table = new SomeTable { SomeOtherField = "Value" };
context.SomeTables.Add(table);
context.SaveChanges();
}
我相信SomeDate
字段将设置为其默认约束(因为它尚未填充到实体中)。这是真的吗?
对SomeOtherField
执行上面列出的相同步骤,我仍然可以手动给它一个值(出现在该字段中的值而不是默认约束)或省略它(默认约束将设置在该字段中)?
这个问题很难解释,如果它没有意义,我深表歉意
StoreGeneratedPattern
意味着该值始终由数据库生成,因此您不能修改它。即它只对数据库计算列有意义。
至少在 EF 6.1 之前,没有直接的方法可以支持数据库默认值。您唯一能做的就是将默认值移出数据库,并在模型端(或代码优先)生成它们。你会发现一些工作点,但在某些情况下它们并不安全(特别是对于 N 层应用)。