首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >代码首先使用已卸载的必需导航属性更新字段

代码首先使用已卸载的必需导航属性更新字段
EN

Stack Overflow用户
提问于 2012-08-08 21:00:54
回答 1查看 267关注 0票数 1

这似乎是CodeFirst的一种非常奇怪的行为。

我有一张桌子:

代码语言:javascript
运行
复制
public string Name {get;set;}

[Required]
public virtual Table1 Table1 {get;set;}

[Required]
public virtual Table2 Table2 {get;set;}

[Required]
public virtual Table3 Table3 {get;set;}

现在,如果我像这样从数据库中获得一行:

代码语言:javascript
运行
复制
var row = database.Include("Table1").First();

row.name = "New name";
row.Table1.name = "New name";

database.SaveChanges();

它将抛出两个错误:

代码语言:javascript
运行
复制
Table2 : The Table2 field is required.

Table3 : The Table3 field is required.

问题是,为什么它要验证这两个未加载的未使用的引用?

我不喜欢加载整个实体,因为一些实体可能有很多引用,只更新1个字段。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-08 21:08:29

如果您使用Required属性标记任何内容,则在保存更改时它必须存在。EF总是在保存期间验证整个实体,并且导航属性的处理方式与正常属性=> null = exception相同。验证在设计上也不会触发延迟加载。

您可以选择:

  • 不使用Required属性可以是
    • 您可以为每个导航属性添加不可为空的外键属性
    • 您可以使用fluent-api代替data fluent

  • 关闭EF validations
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11865069

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档