【问题标题】:How can I get an ObjectSet<T> with EF Code First CTP5 (for a generic repository?)如何使用 EF Code First CTP5 获得 ObjectSet<T> (对于通用存储库?)
【发布时间】:2011-01-13 13:17:15
【问题描述】:

对于 Code First CTP 3 和 4,我通过在 DbContext 中实现具有 return this.ObjectContext.CreateObjectSet&lt;T&gt; 的方法来实现通用存储库模式。这允许我为我需要的任何类型创建一个对象集,然后我可以使用 Linq 对其进行编码。

昨晚我升级到 CTP5,似乎他们已经改变了很多 DbContext 的实现方式。一方面是 DbContext 类中不再有 ObjectContext 属性。据我所知,没有任何方法可以创建ObjectSet&lt;T&gt; 或任何其他我可以用来按需访问的与数据上下文相关联的数据集。

然后我想到在方法中创建一个DbSet&lt;T&gt;,因为这可以让我对其执行 linq-to-entities 操作。不过这也不起作用,因为没有 DbSet&lt;T&gt; 的构造函数(或者编译器告诉我的),我无法将它绑定到我的数据上下文的现有实例。

有人知道如何使用 Code First CTP5 实现通用存储库吗?

【问题讨论】:

    标签: c# entity-framework-4 repository-pattern code-first


    【解决方案1】:

    我的存储库返回IQueryable&lt;T&gt;。 ObjectSet&lt;T&gt; 和 DbSet&lt;T&gt; 都实现了该接口。要获得代码优先的DbSet&lt;T&gt;,要么从你创建的上下文类中提取属性,要么你的上下文类使用的基类有一个名为Set&lt;T&gt;()的方法,它将返回DbSet&lt;T&gt;。

    HTH

    【讨论】:

    • 啊哈,我错过了Set&lt;T&gt;() 方法。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多