Entity Framework如何处理数据库表中的默认约束?

时间:2014-11-17 10:04:02

标签: c# entity-framework tsql

我正在处理代码,在完成代码之前我无法运行,因为这是一个漫长而乏味的过程。我的任务是向现有数据库添加一个新表,更新模型的.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相同的步骤,我仍然可以手动给它一个值(显示在该字段中的值而不是默认约束)或省略它(默认约束将被设置)进入那个领域)?

这个问题很难解释,如果它没有意义,我道歉

1 个答案:

答案 0 :(得分:4)

StoreGeneratedPattern表示该值始终由DB生成,因此您不允许对其进行修改。即只有DB计算列才有意义。

至少在EF 6.1之前,没有直接的方法来支持数据库默认值。您唯一能做的就是将默认值移出数据库并在模型(或代码优先)方面生成它们。您会发现一些工作 - 但在某些情况下它们并不安全(特别是对于N层应用程序)。