繁体   English   中英

实体框架如何处理数据库表中的默认约束?

[英]How does Entity Framework handle Default constraints in the database table?

我正在编写无法完成的代码,因为这是一个漫长而繁琐的过程。 我的任务是向现有数据库添加新表,更新模型的.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层应用程序)它们并不安全。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM