我在Windows 7上使用VisualStudio Ultimate 2012(Update 1).我可以通过以下方式获取我的T4模板生成文件:
右键单击[tt file] | 运行自定义工具.这很棒!(对我而言).如果我运行菜单命令,它也可以工作:Build | 转换所有T4模板.但我想要自动化!当我尝试使用每个构建生成生成的代码文件时遇到问题 - 这是我的目标.
我看了一下:
Visual Studio中的T4转换和构建顺序
这不是我想要的.它讨论了使用预构建构建事件.我希望它成为构建的一部分.
并且: 有没有办法让Visual Studio在成功构建时运行"转换所有模板"?
这不是我想要的.它讨论了使用后期构建事件.
然后我发现了这个: 了解T4:MSBuild集成
来自Oleg Sych的博客:
完善!这就是我要的.虽然他的博客讨论了VS2010,但我已将其应用于VS2012(如适用).
为了实现这一点,我完成了他的每个步骤.我安装了Visual Studio SDK 2012 和Visual Studio Visualization and Modeling SDK(2012)
我开始使用Tangible T4插件,但认为有问题,我使用了Oleg的T4 Toolbox Beta.可悲的是,我似乎得到了相同的结果:构建错误.
我按照他在网站上的指示重新阅读了所有步骤和部分.我已经研究了几天,现在是我的第一篇文章.我被卡住了.谢谢你的期待......
回顾一下:当我在visual studio 2012中构建或者从命令行运行msbuild时出现错误(但是当我运行自定义工具或使用手动转换所有T4模板时 - 我们两个都工作正常).
这是我的t4模板s_code.tt
:
<#@ template debug="true" hostSpecific="true" language="C#" #>
<#@ output extension=".js" #>
<#@ assembly name="System.Core" #>
<#@ assembly name="System.Xml" #>
<#@ assembly name="EnvDTE" …
Run Code Online (Sandbox Code Playgroud) 我在MSDN中使用了EF6中新的测试双打.VS2013与Moq和nUnit.一切都很好,直到我不得不这样做:
var myFoo = context.Foos.Find(id);
然后:
myFoo.Name = "Bar";
然后 :
context.Entry(myFoo).Property("Name").IsModified = true;
此时是我收到错误的地方:
附加信息:无法为属性"名称"调用成员"IsModified",因为上下文中不存在"Foo"类型的实体.要向上下文添加实体,请调用DbSet的Add或Attach方法.
虽然,当我用AddWatch检查上下文中的'Foos'时,我可以在运行测试之前看到我添加的所有项目.所以他们在那里.
我从文章中创建了FakeDbSet(或TestDbSet).我将每个FakeDbSet放在构造函数中的FakeContext中,每个构造函数都被初始化.像这样:
Foos = new FakeDbSet<Foo>();
我的问题是,是否可以使用测试双精度场景使用FakeDbSet和FakeContext,以便从测试双重访问DbEntityEntry和DBPropertyEntry?谢谢!