entity-framework - 在实体框架模型中包含只读列
问题描述
假设我有一个 .NET Entity Framework 模型类:
public class Foo
{
public int FooId { get; set; }
public string Description { get; set; }
public DateTime Created { get; set; }
public DateTime LastUpdated { get; set; }
}
我的 SQL Server 表中的 Created 和 LastUpdated 列都是 type DATETIME2
,都有一个DEFAULT
constraint (SYSUTCDATETIME())
。每当描述更改时,触发器都会AFTER UPDATE
将 LastUpdated 设置为。SYSUTCDATETIME
在我的代码中,当我从 Foo 表中读取数据时,我希望包含 Created 和 LastUpdated,因为我想使用它们的值。但是当我向表中添加一行时,我不希望它们包含在 Add 中,因为我希望 SQL Server 使用我配置它使用的默认值。我以为这只是一个问题
Foo foo = new Foo
{
Description = "This is my latest foo."
}
但是 C# 为这两个日期属性提供了它们自己的默认值 0001-01-01T00:00:00.000000,它不为空,这就是表中记录的内容。
不是有一个属性告诉框架不要将属性写回数据库吗?这不是NotMapped
因为这会阻止读取值。
解决方案
`当你发布你的问题后立即找到答案时,你不讨厌吗?
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
从插入和更新中省略属性。[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
从插入中省略属性。
后者将处理 EndDate,我没有在我的帖子中说明。我让数据库在插入时设置了默认值 9999-12-31T23:59:59,但我的应用程序稍后会在 Foo 到期时更改它的值。
让我感到沮丧的是,他们的命名基于在不同场景中不会想到的特定用例。它们应该与[SkipOnInsert]
and一起使用[SkipOnUpdate]
(然后可以根据需要组合)。
推荐阅读
- swift - UITabBarController: UITabBarItem 更新它或重新加载它
- node.js - 'sed' is not recognized as an internal or external command in Windows
- python - 简单的 CNN 模型四个图像输入来检测两个类别
- sql - Advanced Laravel Query
- c# - Regex: finding words that end with the same letter the next word begins with
- c++ - Proper usage of QThread in loops
- mysql - Issue with the syntax of SQL event
- css - How to animate custom SVG with clip path and dashoffset?
- identityserver4 - Identity Server 4 Silent Renew ErrorResponse: login_required
- jquery - jQuery如何禁用/启用对话框中的提交按钮