c# – 在模拟的EF6数据库中通过外键加载相关数据
最近我开始了一个模拟各种神经网络应用的项目.为了处理大量涉及的数据,我使用Entity Framework Model第一种方法实现了SQL-Server后端.此外,我已经非常喜欢测试驱动开发(TDD)学科.但是为了做到这一点,我需要一个模拟数据库来运行我的测试.经过多次搜索,我找到了商业和开源的多种解决方案.在这一点上值得注意的是,在涉及数据库相关主题时,我是新手.因此,我选择使用内存模拟中描述的msdn来描述EF6框架,如
here所述.
Pff,现在我们得到了背景,这是我的问题: 我已经创建了我的模型并从中生成了数据库.真实接口层的代码生成由edmx完成.为了进行单元测试,我遵循了上述教程并调整了相关字段以匹配我的数据库模型. (可以找到http://i.imgur.com/julse1Y.png?1,不幸的是我没有代表将图像包含在帖子中……). 我遇到的问题是,在指定相关外键时,相关数据未与当前DBSet一起加载.例如,在为Connection集设置数据时,我希望条目链接到相关数据,在这种情况下,Node集的元素: var context = new TestContext(); context.NodeSet.Add(new Node { NodeID = 1 }); context.NodeSet.Add(new Node { NodeID = 2 }); context.ConnectionSet.Add(new Connection { ConnID = 1,ToNodeID = 1,FromNodeID = 2 }); var conn = context.ConnectionSet.First(); var fromNode = conn.FromNode; var toNode = conn.ToNode; 在此示例中,指定Connection的FromNode属性返回null.期望的情况是模拟具有将ToNodeID键与相关对象相关联的能力.此外,我希望加载顺序与解决关键约束i.a.w相关.为了解析FromNode字段,必须存在相应的Node. 我对所有关于这个具体问题的建议持开放态度,但是如果你们中的任何人知道一种更具建设性的方式来模拟EF6模型的第一个数据库设计. 提前致谢! 解决方法
在讨论并重新思考问题之后,我认为最简单的方法是忘记按ID自动解析,而是在测试之前手动设置引用.
换句话说,如果您有两个dbset,则Child和Parent以及每个子实体都指向单个父级,以便您拥有 public class Child { public int ID_PARENT { get; set; } public virtual Parent Parent { get; set; } } 然后你用数据设置你的模拟 var mockedContext = ... ; // create mocked context with mocked DbSets as // shown in the article you refer to Child c = new Child(); Parent p = new Parent(); c.Parent = p; // set up the relation manually mockedContext.Child.Add( c ); mockedContext.Parent.Add( p ); // property resolving works now as you have set it up in an explicit way // note that IDs are irrelevant var children = mockedContext.Child.Where( c => c.Parent != null && c.Parent.Name.StartsWith( "n" ) ); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |