EF5 和架构中的非空字符串出现了一些谜团。例如,假设我们有这个简单的用户表:
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();
这应该有效。附加后,不可为空UserName
的为空。哪个应该没问题 - 我不想更改它,并且更改检测表明该值未更改。但是,当我调用 时SaveChanges
,会抛出一个 DB 验证异常,说明它UserName
是无效的。
所以,从这里,有两个问题:
- 我做错了什么?我完全愿意相信我对实体框架的理解是有缺陷的。
- 为什么在保存时不使用按属性更改状态?我知道
context.Configuration.ValidateOnSaveEnabled
,但我不认为简单地关闭验证是一个有效的答案。我可以依靠另一个类似的选择吗?