我最近开始在我的.NET 4.0应用程序中使用Entity Framework 4.0,并对与池化相关的一些事情感到好奇.
据我所知,连接池由ADO.NET数据提供程序管理,在我的情况下是MS SQL服务器.当您实例化新的实体context(ObjectContext)时,这是否适用,即无参数new MyDatabaseModelEntities()?
a)为应用程序创建全局实体上下文(即一个静态实例)或b)使用using块为每个给定操作/方法创建和公开实体上下文有哪些优点和缺点.
我应该了解的某些场景的任何其他建议,最佳实践或常用方法?
我研究了一些关于我可以用来对DbContext进行单元测试的技术的信息.我想在上下文中添加一些内存数据,以便我的测试可以针对它运行.我正在使用Database-First方法.
我发现最有用的两篇文章是这个和这个.该方法依赖于创建一个MyContext和FakeContext都将实现的IContext接口,允许模拟上下文.
但是,正如某些人所指出 的 那样,我试图避免使用存储库来抽象EF,因为EF 4.1已经通过DbSet和DbContext实现了存储库和工作单元模式,我真的想保留EF实现的所有功能.团队无需使用通用存储库维护它们,正如我在其他项目中所做的那样(这有点痛苦).
使用IContext会引导我走同一条路(或者不是吗?).
我考虑创建一个继承自主MyContext的FakeContext,从而利用它下面的DbContext来运行我的测试,而不需要访问数据库.我找不到类似的实现,所以我希望有人可以帮助我.
我做错了什么,或者这会导致我遇到一些我没想到的问题?
如何创建要在我们的上下文中使用的自定义DbSet,
在这里,我从DbSet中获取了代码示例,如下所示.
在上下文中我有:
public CustomDbSet<Items> MyDbSet { get; set; }
Run Code Online (Sandbox Code Playgroud)
任何时候我们达到" context.MyDbSet"它是null,将其更改为一个简单的DbSet它将工作并且它已正确初始化,
public class CustomDbSet<TEntity> : DbSet<TEntity>, IDbSet<TEntity> where TEntity : Entity, new()
{
#region Private Fields
private readonly ObservableCollection<TEntity> _items;
private readonly IQueryable _query;
#endregion Private Fields
public CustomDbSet()
//: base()
//: base((IInternalQuery<TEntity>)internalSet)
{
_items = new ObservableCollection<TEntity>();
_query = _items.AsQueryable();
}
}
Run Code Online (Sandbox Code Playgroud)
它将有更多的属性.