我正在针对现有数据库使用 EF (v5),该数据库具有大量具有默认值的可空字段。
插入新实体时,如果没有为可空字段指定值,则将插入空值(不会使用数据库默认值)。这是有道理的,因为 EF 无法确定我是否真的打算为空。
但是,如果我将字段设置为StoreGeneratedPattern = Computed
,它将在插入时使用默认值,但它只会使用默认值。如果我提供自己的值(即使在 上),该值似乎会被忽略。Update
有没有办法让这个场景在不更改底层数据库的情况下工作?
我正在关注的过程示例:
var myEntity = databaseSession.MyEntities.Single(x => x.EntityID = 123);
myEntity.SomeField = 1;
databaseSession.SaveChanges();
SomeField
在这种情况下是类型int?
并设置为StoreGeneratedPattern = Computed
使用 EFProf,我可以看到发出的 SQL 查询是:
update [dbo].[MyEntities]
set @p = 0
where ([EntityID] = 123 /* @0 */)
添加:
databaseSession.ObjectStateManager.ChangeObjectState(myEntity, System.Data.EntityState.Modified);
导致生成更新语句,更新表中的所有字段,但至关重要的是,它不包括任何设置为StoreGeneratedPattern = Computed