在 Entity Framework 模型中包含只读列
Including read-only columns in an Entity Framework model
假设我有一个 .NET Entity Framework 模型 class:
public class Foo
{
public int FooId { get; set; }
public string Description { get; set; }
public DateTime Created { get; set; }
public DateTime LastUpdated { get; set; }
}
我的 SQL 服务器 table 中的 Created 和 LastUpdated 列均为 DATETIME2
类型,具有 DEFAULT
约束 (SYSUTCDATETIME())
。每当描述更改时,AFTER UPDATE
触发器将 LastUpdated 设置为 SYSUTCDATETIME
。
在我的代码中,当我读取 Foo table 时,我希望包含 Created 和 LastUpdated,因为我想使用它们的值。但是当我向 table 添加一行时,我不希望它们包含在添加中,因为我希望 SQL 服务器使用我配置它使用的默认值。我以为这只是拥有
的问题
Foo foo = new Foo
{
Description = "This is my latest foo."
}
但是 C# 为这两个日期属性赋予了它们自己的默认值 0001-01-01T00:00:00.000000,这不是 null,这就是 table.[= 中记录的内容19=]
难道没有一个属性告诉框架不要将 属性 写回数据库吗?它不是 NotMapped
,因为那样会阻止读取值。
`您不讨厌 post 提出问题后立即找到答案吗?
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
从插入和更新中省略了 属性。
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
从插入中省略 属性。
后者将处理 EndDate,我没有在我的 post 中说明。我在插入时将数据库设置为默认值 9999-12-31T23:59:59,但我的应用程序稍后会在 Foo 到期时更改其值。
令我恼火的是,他们根据在不同场景中不会想到的特定用例命名。他们应该与 [SkipOnInsert]
和 [SkipOnUpdate]
一起使用(然后可以根据需要组合)。
假设我有一个 .NET Entity Framework 模型 class:
public class Foo
{
public int FooId { get; set; }
public string Description { get; set; }
public DateTime Created { get; set; }
public DateTime LastUpdated { get; set; }
}
我的 SQL 服务器 table 中的 Created 和 LastUpdated 列均为 DATETIME2
类型,具有 DEFAULT
约束 (SYSUTCDATETIME())
。每当描述更改时,AFTER UPDATE
触发器将 LastUpdated 设置为 SYSUTCDATETIME
。
在我的代码中,当我读取 Foo table 时,我希望包含 Created 和 LastUpdated,因为我想使用它们的值。但是当我向 table 添加一行时,我不希望它们包含在添加中,因为我希望 SQL 服务器使用我配置它使用的默认值。我以为这只是拥有
的问题Foo foo = new Foo
{
Description = "This is my latest foo."
}
但是 C# 为这两个日期属性赋予了它们自己的默认值 0001-01-01T00:00:00.000000,这不是 null,这就是 table.[= 中记录的内容19=]
难道没有一个属性告诉框架不要将 属性 写回数据库吗?它不是 NotMapped
,因为那样会阻止读取值。
`您不讨厌 post 提出问题后立即找到答案吗?
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
从插入和更新中省略了 属性。[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
从插入中省略 属性。
后者将处理 EndDate,我没有在我的 post 中说明。我在插入时将数据库设置为默认值 9999-12-31T23:59:59,但我的应用程序稍后会在 Foo 到期时更改其值。
令我恼火的是,他们根据在不同场景中不会想到的特定用例命名。他们应该与 [SkipOnInsert]
和 [SkipOnUpdate]
一起使用(然后可以根据需要组合)。