最近我开始了一个模拟各种神经网络应用的项目.为了处理大量涉及的数据,我使用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" ) );
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。