【发布时间】:2015-06-18 17:26:13
【问题描述】:
我知道我可以使用 NotMapped 属性或 Fluent API 从映射中排除列,但这并不是我想要的。
假设我有 Customer 类型的对象,然后我想检查以下内容:
if (customer.UpgradeVersion < 2) // some condition
{
context.Entry(customer).Property(c => c.MyProperty).IsModified = false;
}
这将在客户被修改时从UPDATE语句中排除属性,但它不适用于INSERT-s。
理想情况下,我想有条件地为某个对象“取消映射”属性,这样它就不会针对其验证属性等进行插入/更新/验证。
实际上,我可以使用IsModifed 标志覆盖ValidateEntity 的DbContext + 解决方法更新,但inserts-s 是主要问题...
【问题讨论】:
-
如果插入新的客户行,数据库表中的属性值应该是多少? DBNull?
-
如何制作一个自定义属性来处理它?
-
@Alex,关键是数据库表可能根本不包含该列 - 这大致是条件实际检查的内容。因此,
INSERT INTO customer(id, ..., MyProperty)语句将失败,即使参数值为 DBNull。 -
@ggui,我可以举个例子吗?好像我必须覆盖 SQL 生成
标签: c# sql-server entity-framework ef-code-first