EF导航属性

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EF导航属性相关的知识,希望对你有一定的参考价值。

  其实有个小问题困扰了我好久,在年前一个项目的时候 当我使用EF向数据库添加一条数据并SaveChanges()之后,立即根据主键再查询出这条数据的时候,发现所有的导航属性竟然都没有值。

  直接上测试项目,我们要创建两个对象,分别是Users和Orders,Users和Order的关系是一对多的关系。先补充一个小知识(我非常小白)_codeFitst.Orders.Add(order);如果order主键是自动增加的,当_codeFitst.SaveChanges();执行之后,order对象中的id会刷新(我今天才知道(-__-)b)。

 

技术分享
            var _codeFitst = new CodeFirst.Entities.SmartStartEntities();
            CodeFirst.Model.Orders order = new Model.Orders()
            {
                IsComplete = false,
                Name = "抬头仰望",
                UserId = 1,
            };
            _codeFitst.Orders.Add(order);
            _codeFitst.SaveChanges();
            var id = order.Id;
            var user = _codeFitst.Orders.SingleOrDefault(s => s.Id == order.Id).Users;
            var _codeFitstTwo = new CodeFirst.Entities.SmartStartEntities();
            var users = _codeFitstTwo.Orders.SingleOrDefault(s => s.Id == order.Id).Users;
放到控制台Main函数内即可

 

运行之后,我们断点调试,可以看见

技术分享

user对象是null 没有值得,而users对象就是有值得。由此可以得出EF在做查询方法的时候首先是在上下文的集合里面去查寻是否有符合的对象,没有再连接数据库去查询。

以上是关于EF导航属性的主要内容,如果未能解决你的问题,请参考以下文章

EF 6 代码首先,在导航属性上使用包含更改外键 ID 会导致“发生引用完整性约束违规”错误

EF codefirst:我应该初始化导航属性吗?

没有导航属性的EF Code First外键

如何通过WCF SOAP服务访问EF导航属性?

EF导航属性

EF架构~过滤导航属性等,拼接SQL字符串