デフォルト値を持つ多数の null 許容フィールドを持つ既存のデータベースに対して EF (v5) を使用しています。
新しいエンティティを挿入するときに、null 許容フィールドに値が指定されていない場合は、null が挿入されます (データベースの既定値は使用されません)。これは、私が本当に null を意図しているかどうかを 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);
テーブル内のすべてのフィールドを更新する update ステートメントが生成されますが、重要なことに、これには次のように設定されているフィールドは含まれません。StoreGeneratedPattern = Computed