スキーマ内の EF5 と null 以外の文字列に関して、ちょっとした謎が浮かび上がりました。たとえば、次の単純なユーザー テーブルがあるとします。
CREATE TABLE Users
(
UserID INT PRIMARY KEY NOT NULL IDENTITY(1,1),
UserName VARCHAR(50) NOT NULL,
UserFirst VARCHAR(50) NULL,
UserLast VARCHAR(50) NULL
)
...そして、それを表す POCO クラスを作成します。これはすべてうまくいきます。データを取得して作成することはできますが、更新によって深刻な問題が発生します。特定のユーザーの名を更新したいとします。
User user = new User { UserID = 12345 };
context.Users.Attach(user);
user.FirstName = "SomethingElse";
context.SaveChanges();
これはうまくいくはずです。アタッチ後、null 非許容UserName
は null です。これは問題ないはずです-変更しようとしているわけではなく、変更検出は値が変更されていないと述べています。ただし、 を呼び出すと、が無効であるSaveChanges
ことを示す DB 検証例外がスローされます。UserName
したがって、これから、2つの質問:
- 私はひどく間違ったことをしていますか?エンティティ フレームワークに関する私の理解には欠陥があると信じています。
- プロパティによる変更状態が保存時に使用されないのはなぜですか? は承知し
context.Configuration.ValidateOnSaveEnabled
ていますが、単純に検証をオフにすることは有効な答えではないと思います。私が頼ることができる別の同様のオプションはありますか?