假设我在我的数据库中有以下表格:
CREATE TABLE [dbo].[Test]
(
[Id] INT IDENTITY (1, 1) NOT NULL,
[Active] BIT DEFAULT ((1)) NOT NULL,
)
当从此数据库创建EF模型时,映射到布尔列的
Active
位(bit)列的映射没有默认值(请参见属性“默认值”):
![属性视图 - 模型图](https://istack.dev59.com/Z3qwT.webp)
1
,我认为这将是模型中true
的默认值。我真的需要再次为模型中的所有列设置默认值吗?我检查了int和bit列的这种行为。
我进行了更多的调查,尝试手动将“默认值”属性设置为True
和true
,两者都有效。
public Test()
{
}
到
public Test()
{
this.Active = true;
}
EF中可以使用默认值,但在基于数据库的模型生成过程中,默认值并未设置,至少在我的机器上没有设置。
因此,问题仍然存在:即使列在数据库中已经设置了默认值,我是否仍然需要在模型中再次设置默认值?
Test t = new Test()
)将填充默认值。因此,ctx.Tests.Add(t); ctx.SaveChanges();
将在数据库中生成一个新条目,其中包含一个带有Active = 1
的 Test 条目,因为Active
"未被手动设置"(就像你说的 "只更改必须更改的内容"),因此应使用默认值。 但似乎 EF 不是这样工作的... - Markus Weninger.sql
文件与模型生成的文件一起:ExtraSQL.sql
和InitialData.sql
。 "额外的SQL"是这些默认值;需要应用的其他SQL规则,这些规则不能通过EF轻松完成。 "初始数据"是系统中需要的任何数据,以使其正常运行。然后,我可以执行这三个脚本,并立即拥有一个工作系统。 - Dave Cousineau