Questions tagged «dbcontext»

DbContext API首先随Entity Framework版本4.1一起提供,并为使用Entity Framework提供了更高产的表面,并且可以与Code First,Database First和Model First方法一起使用。

9
每个Web请求一个DbContext ...为什么?
我阅读了许多文章,这些文章解释了如何设置实体框架,DbContext以便使用各种DI框架为每个HTTP Web请求创建和使用一个实体框架。 为什么这首先是个好主意?通过使用这种方法,您可以获得什么优势?在某些情况下这是个好主意吗?使用DbContext每个存储库方法调用实例化s 时,您是否可以使用该技术做一些事情?

12
实体框架:一个数据库,多个DbContext。这是一个坏主意吗?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引文回答。 上个月关闭。 改善这个问题 迄今为止,我的印象是a DbContext表示您的数据库,因此,如果您的应用程序使用一个数据库,则只需要一个DbContext。 但是,一些同事希望将功能区域划分为不同的DbContext类。 我相信这是一个好地方-希望保持代码更清洁-但它似乎不稳定。我的直觉告诉我这是一个坏主意,但不幸的是,我的直觉并不能满足设计决策的要求。 所以我在寻找: A)为什么这可能不是一个好主意的具体例子; B)保证一切都会顺利进行。


21
实体类型<type>不是当前上下文模型的一部分
我正在进入实体框架,但是不确定是否缺少代码优先方法的关键点。 我正在使用基于https://genericunitofworkandrepositories.codeplex.com/中的代码的通用存储库模式,并创建了我的实体。 但是,当我尝试访问或修改实体时,会遇到以下问题: System.InvalidOperationException:实体类型Estate不属于当前上下文模型。 当我尝试从存储库访问它时会发生这种情况: public virtual void Insert(TEntity entity) { ((IObjectState)entity).ObjectState = ObjectState.Added; _dbSet.Attach(entity); // &lt;-- The error occurs here _context.SyncObjectState(entity); } 可以很好地创建数据库(./SQLEXPRESS),但是在启动时不创建实体(表)。 我想知道是否需要显式设置实体的映射?EF自己不能做到这一点吗? 我的实体是: public class Estate : EntityBase { public int EstateId { get; set; } public string Name { get; set; } } 我的情况是这样的: public partial …

14
如何使用DbContext和SetInitializer解决datetime2超出范围的转换错误?
我正在使用Entity Framework 4.1引入的DbContext和Code First API。 该数据模型使用的基本数据类型,如string和DateTime。在某些情况下[Required],我使用的唯一数据注释是,但这不在任何DateTime属性上。例: public virtual DateTime Start { get; set; } 该的DbContext子类也很简单,看起来像: public class EventsContext : DbContext { public DbSet&lt;Event&gt; Events { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity&lt;Event&gt;().ToTable("Events"); } } 在初始化设置日期在模型中有意义的值在今年或明年。 但是,当我运行初始化程序时,在以下位置出现此错误context.SaveChanges(): 从datetime2数据类型到datetime数据类型的转换导致值超出范围。该语句已终止。 我根本不明白为什么会这样,因为一切都很简单。我也不确定如何解决它,因为没有edmx文件可以编辑。 有任何想法吗?

4
LINQ to Entities仅支持使用IEntity接口转换EDM基本类型或枚举类型
我有以下通用扩展方法: public static T GetById&lt;T&gt;(this IQueryable&lt;T&gt; collection, Guid id) where T : IEntity { Expression&lt;Func&lt;T, bool&gt;&gt; predicate = e =&gt; e.Id == id; T entity; // Allow reporting more descriptive error messages. try { entity = collection.SingleOrDefault(predicate); } catch (Exception ex) { throw new InvalidOperationException(string.Format( "There was an error retrieving …

5
如何强制Entity Framework始终从数据库获取更新的数据?
我正在使用EntityFramework.Extended库执行批处理更新。唯一的问题是EF无法跟踪该库执行的批量更新。因此,当我DbContext再次查询时,它不会返回更新的实体。 我发现AsNoTracking()在查询时使用method会禁用跟踪并从数据库中获取新数据。但是,由于EF无法跟踪使用查询的实体AsNoTracking(),因此我无法对查询的数据执行任何更新。 有什么方法可以强制EF在跟踪更改时获取最新数据?

4
实体框架5实体的深层复制/克隆
我正在使用Entity Framework 5(DBContext),并且试图找到最佳方法来深度复制实体(即复制实体和所有相关对象),然后将新实体保存在数据库中。我怎样才能做到这一点?我已经研究过使用扩展方法,例如,CloneHelper但不确定是否适用于DBContext。

6
用Moq模拟EF DbContext
我正在尝试使用模拟的DbContext为我的服务创建单元测试。我创建了一个IDbContext具有以下功能的接口: public interface IDbContext : IDisposable { IDbSet&lt;T&gt; Set&lt;T&gt;() where T : class; DbEntityEntry&lt;T&gt; Entry&lt;T&gt;(T entity) where T : class; int SaveChanges(); } 我的真实上下文实现了此接口IDbContext和DbContext。 现在,我尝试IDbSet&lt;T&gt;在上下文中模拟,因此它返回一个List&lt;User&gt;。 [TestMethod] public void TestGetAllUsers() { // Arrange var mock = new Mock&lt;IDbContext&gt;(); mock.Setup(x =&gt; x.Set&lt;User&gt;()) .Returns(new List&lt;User&gt; { new User { ID = 1 } …

10
C#实体框架:在存储库类内部正确使用DBContext类
我曾经实现我的存储库类,如下所示 public Class MyRepository { private MyDbContext _context; public MyRepository(MyDbContext context) { _context = context; } public Entity GetEntity(Guid id) { return _context.Entities.Find(id); } } 但是,我最近阅读了这篇文章,该文章说将数据上下文作为存储库中的私有成员是一种不好的做法:http : //devproconnections.com/development/solving-net-scalability-problem 现在,从理论上讲,这篇文章是对的:由于DbContext实现IDisposable,因此最正确的实现如下。 public Class MyRepository { public Entity GetEntity(Guid id) { using (MyDbContext context = new MyDBContext()) { return context.Entities.Find(id); } } } …

6
实体框架和调用context.dispose()
什么时候应该调用DbContext.dispose()实体框架? 这种假想的方法不好吗? public static string GetName(string userId) { var context = new DomainDbContext(); var userName = context.UserNameItems.FirstOrDefault(x =&gt; x.UserId == userId); context.Dispose(); return userName; } 这是否更好? public static string GetName(string userId) { string userName; using(var context = new DomainDbContext()) { userName = context.UserNameItems.FirstOrDefault(x =&gt; x.UserId == userId); context.Dispose(); } return …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.