我已经通过朱莉·勒曼对实体框架书的工作,以确保动态代理创造,我碰到多少有些障碍的......编写单元测试通过测试IEntityWithChangeTracker(EF4)
在66页的“编程实体框架的DbContext”朱莉建议编写单元测试,以确保正在创建动态代理,因为用于获取实体框架创建更改跟踪代理是相当简单的要求,但也很容易错过。
有了这样说,我也跟着朱莉的例子来写我的代码下面的测试的总体结构:
[Test]
public void IsDynamicProxy()
{
using (var scienceFairToGoContext = new ScienceFairToGoContext())
{
var scienceFair = scienceFairToGoContext.ScienceFairs.Create();
Assert.IsTrue(scienceFair is IEntityWithChangeTracker);
}
}
当我将鼠标悬停在scienceFair对象的非常明显的一个变化跟踪代理
System.Data.Entity.DynamicProxies.ScienceFair_D3C57A2F699E75F716E63553D950EF7EC75F0C603F69093FCD78122CC0D6452C
...但每当我运行单元测试它总是失败,因为“scienceFair是IEntityWithChangeTracker”总是评估为false。
看来好像someone else ran into this issue as well and posted it to the O'Reilly forums,但似乎没有被解决方案发布,也没有我的谷歌搜索返回任何类型的答案。
我目前使用Visual Studio 2010,EF4,NUnit的,并通过ReSharper的运行我的测试。还值得一提的是,如果在简单的控制台应用程序中运行代码并调试它,我会得到相同的结果。
我喜欢这样的解决方案,但有一两件事我很担心。我按照你的建议实施了这个测试,但是当我从ScienceFair类的一个标量属性中去掉virtual关键字时,我注意到一个动态代理仍在创建,并且测试仍然被标记为传递。 我只能假设这是一个动态代理的关系,修复行动作为变革跟踪代理的规则之一是,所有属性必须被标记为虚拟的。有什么方法可以确定这是测试中的变更跟踪代理吗? –