- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试根据 http://blogs.msdn.com/b/adonet/archive/2009/12/17/walkthrough-test-driven-development-with-the-entity-framework-4-0.aspx 创建假上下文
正如我所看到的,有一个接口(interface)公开了返回 IObjectSet<...> 的方法,但是 T4 模板生成了返回 ObjectSet<...> 的方法并且没有生成的接口(interface),并且在该页面上作者将接口(interface)添加到创建了上下文,这为他提供了创建模拟等的方法。
我的主要目标是使用 T4 模板生成 poco 类并创建模拟/假上下文来测试我的自定义存储库。有没有什么办法可以让它在不编写或更改 T4 模板的情况下工作?如果它返回 ObjectSet 而不是 IObjectSets,我如何在上下文之上创建模拟(因为 IObjectSet 不是微不足道的)...
提前致谢
最佳答案
作者只是在模拟存储库,而不是实体。 EntityFramework 生成 ObjectQueries,但他包装它们并且他的存储库返回 IObjectQueries。他这样做是为了轻松模拟数据,然后在保存期间他只验证实体。
如果您只是想创建一个“模拟”存储库,您可以创建自己的 T4 模板并遍历 edmx 文件并生成代码。但是有没有理由非要生成POCOS?它们已经存在,为什么你需要重新创建它们?他将所有内容抽象到一个“通用”FakeObjectSet 中,所以真的没有那么多代码要写吗?
您是否尝试生成此内容:
public IObjectSet<Blog> Blogs
{
get
{
return _blogs ?? (_blogs = new FakeObjectSet<Blog>());
}
set
{
_blogs = value as FakeObjectSet<Blog>;
}
}
private FakeObjectSet<Blog> _blogs;
如果是这样,我猜你会花更多的时间在 T4 上,然后你就会写它。
没有类声明的示例 T4...您可以按照 this blog 完成完整的 t4
<#
foreach (EntitySet set in container.BaseEntitySets.OfType<EntitySet>())
{
#>
public IObjectSet<<#=MultiSchemaEscape(set.ElementType, code)#>>
{
get{
return <#=code.FieldName(set)#> ?? ( <#=code.FieldName(set)#> = FakeObjectSet<<#=MultiSchemaEscape(set.ElementType, code)#>>("<#=set.Name#>"));
}
set{
<#=code.FieldName(set)#> = value as FakeObjectSet<<#=MultiSchemaEscape(set.ElementType, code)#>>("<#=set.Name#>");
}
}
private FakeObjectSet<<#=MultiSchemaEscape(set.ElementType, code)#>> <#=code.FieldName(set)#>;
<#
}
#>
这将生成此代码:
public IObjectSet<Blogs>{
get{
return _Blogs?? ( _Blogs = FakeObjectSet<Blog>("Blogs"));
}
set{
_Blogs= value as FakeObjectSet<Class>("Blogs");
}
}
private FakeObjectSet<Blog> _Blogs;
边注。
IObjectSet包含在 System.Data 中,因此添加对 System.Data.Entity.dll 的引用
关于c# - 使用 POCO 和 t4 模板测试 EF 4.0 - 如何模拟上下文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3617750/
以下哪项是实现 poco 的最佳方式? 选项 1: public class PocoOption1 { public PocoOption1(int val1,string val2) {
我有一个接受 的方法任意 POCO。然后,该方法需要能够检查 POCO 是否为 List。 .如果不是列表,则需要将其转换为列表。 例子 MyCustomMethod(object input) {
我在研究 ADO.net Entity Framework (EF 4.0) 时遇到了这个术语。我很难理解这个词。我知道 POCO 类及其在创建 PI 模型中的用途,但我不确定 POCO 代理。 有人
我在 EF4 CTP5 项目上使用 POCO 类,但在删除子属性时遇到问题。这是我的例子(希望不会太长)。 旅游类相关部分 public partial class Tour { public G
我开始使用 Poco::NotificationQueue。我注意到奇怪的行为,如果多个工作线程使用 waitDequeueNotification() 在同一个 NotificationQueue
在我的一个项目中,我有一些模型不想与 POCO 一起使用,即使用 EF 生成的类和其他一些我想使用 POCO 的模型。当我混合使用它们时,POCO 映射不起作用,我得到一个异常 System.Inva
我看到了这个问题,“POCO 是什么意思?”在网上问了很多,看到很多解释,但我还是不清楚。我知道它代表“Plain Old CLR Object”,但这并不能真正帮助我理解。 有人可以给我一些不是 P
遇到这样的情况怎么办?拥有多个 ViewModel 引用同一个 POCO 对象。 ViewModel A 更新 POCO ......现在 ViewModel B 需要以某种方式了解这一点? 最佳答案
我在 WCF 服务应用程序中有一层业务级对象和一层契约(Contract)级对象。我所指的业务层对象只是我用来保存数据的实体或 POCO 对象。我指的契约(Contract)级对象是构成我的客户看到的
向 POCO 添加方法或创建单独的类以在我们需要时更新 POCO 的值是一种好的做法吗? 例如, public class ForUser { [Required] public in
我在 Poco 中编写了一个 HTTP 客户端,它将 POST 请求发送到 HTTPServer 以下是片段 Poco::Net::HTTPClientSession s("127.0.0.1", 9
我有一个场景,其中我有一些自定义实体在绑定(bind)到其 UI 的系统(桌面)中使用。我已经转向 Entity Framework 以获得它提供的好处,但由于自定义实体与系统紧密耦合,我将继续使用自
我第一次在一个小项目中尝试使用 POCO 的 EF 4。在我的 Repository 实现中,我想提供一个 AddOrUpdate 方法,如果它是新的,它会将传入的 POCO 添加到存储库中,否则什么
我正在尝试将图像上传到远程网络服务器。我使用过 HTMLForm 和 FilePartSource。我能够成功地将图像上传到本地服务器(即 loclhost),但是当我尝试将其上传到远程服务器时,从远
我已尝试将 Entity Framework 4 和 POCO 用于我的 MVC 3 项目。可能是,我不明白这个ORM的主要思想,但问题如下: 我添加了 ADO .NET 实体数据模型并根据数据库制作
我在服务方法中遇到一种情况,其中将 POCO 分配为另一个 POCO 的子对象无法按预期工作。我正在使用 Entity Framework 4。 public void ChangeOrderCurr
我是 POCO lib 的新手,我正在做教程 pdf 上的网络示例。 当我运行 DatagramSocket 发送示例时,我总是会收到 Poco::Net::NetException。 如果我使用教程
有人可以指出 POCO、自我跟踪实体、POCO 代理之间的区别吗? 实际上,我正在使用 Entity Framework 4.0 和 POCO(存储库模式),每当我在 POCO 中进行一些更改并调用
将域对象与任何类型的持久性代码完全分离的能力使系统更具可扩展性和可维护性。当业务逻辑可以与存储代码分开测试时,测试变得更加容易。将 POCO 与 Entity Framework (EF) 一起使用绝
我有 POCO 类,我使用 NewtonSoft json 进行序列化。现在我想将其迁移到Google协议(protocol)buff。有什么方法可以迁移我的所有类(不是手动),以便我可以使用 goo
我是一名优秀的程序员,十分优秀!