Tag: dbcontext

将多个DbContexts与通用存储库和工作单元一起使用

我的应用程序越来越大,到目前为止,我有一个MyDbContext ,它包含我在我的应用程序中需要的所有表。 我希望(为了概述)将它们分成多个DbContext ,如MainDbContext , EstateModuleDbContext , AnotherModuleDbContext和UserDbContext 。 我不确定这是怎么做的可能因为我现在正在使用dependecy injection(ninject)将我的DbContext放在我的UnitOfWork类上,如: kernel.Bind(typeof(IUnitOfWork)).To(typeof(UnitOfWork)); 我是否应该通过dependency injection和显式设置我希望在我的服务上使用的DbContext来删除此方法,例如: private readonly EstateService _estateService; public HomeController() { IUnitOfWork uow = new UnitOfWork(); _estateService = new EstateService(uow); } 代替: private readonly EstateService _estateService; public HomeController(IUnitOfWork uow) { _estateService = new EstateService(uow); } 或者这有另一种更好的方法吗? 另外作为一个附带问题,我不喜欢将uow传递给我的服务 – 还有另一种(更好的)方法吗? 码 我有这个IDbContext和MyDbContext: public interface IDbContext { […]

EF(entity framework)使用“使用”语句

我有一个关于MVC的项目。 我们为数据库交易选择了EF。 我们为BLL层创建了一些管理器。 我找到了很多例子,其中using “ using ”语句,即 public Item GetItem(long itemId) { using (var db = new MyEntities()) { return db.Items.Where(it => it.ItemId == itemId && !it.IsDeleted).FirstOrDefault(); } } 这里我们创建一个DBcontext MyEntities()的新实例。 我们使用“ using ”以“确保正确使用IDisposable对象”。 这只是我经理中的一种方法。 但我有十多个。 每当我从管理器调用任何方法时,我将使用“ using ”statemant并在内存中创建另一个DBcontext。 什么时候垃圾收集器(GC)会处理它们? 谁知道? 但是还有另一种使用管理器方法的方法。 我们创建一个全局变量: private readonly MyEntities db = new MyEntities(); 并且在没有“ using ”语句的每个方法中使用DBcontext。 方法看起来像这样: public […]

entity frameworkDbContext更新值无需查询和外键

我有一个更新一些表的方法。 对于更新,我需要获得TestProcess第一个,但我不喜欢它。 如何在没有select(firstOrDefault)操作的情况下更新TestProcess ,仅用于更新操作? 方法示例: public void UpdateTestProcess(int id, string updateID) { using (TestEntities context = new TestEntities()) { TestProcess pr = context.TestProcess.FirstOrDefault(x => x.MyID == id); pr.UpdateID = updateID; context.TestProcess.Attach(pr); context.ObjectStateManager.ChangeObjectState(pr, EntityState.Modified); context.SaveChanges(); } }

如何正确实现其他实体对Identity用户的引用?

我正在使用具有自己上下文的Identity。 public class ApplicationUser : IdentityUser { // some custom fields } public class IdentityContext : IdentityDbContext { //… } 我也有一些像这样的其他实体 public class Comment{ public int Id {get;set;} public string Message{get;set;} public DateTime Time{get;set;} } 这是我的其他背景使用的 public class MyContext :DbContext { public DbSet Comments { get; set; } //… other DbSets } 题。 我希望我的评论实体有作者属性,所以我会有类似的东西 public […]

在Entity Framework Core中创建迁移时如何配置DbContext?

在使用Entity Framework的迁移命令时,是否可以配置/引导dependency injection? Entity Framework Core支持DbContext子类的dependency injection。 该机制包括允许在DbContext之外配置数据访问。 例如,以下内容将使用从config.json检索的连接字符串将EF配置为持久保存到SQL Server ServiceCollection services = … var configuration = new Configuration().AddJsonFile( “config.json” ); services.AddEntityFramework( configuration ) .AddSqlServer() .AddDbContext( config => config.UseSqlServer() ); 但是,迁移命令不知道执行此代码,因此由于缺少提供程序或缺少连接字符串, Add-Migration将失败。 通过在DbContext子类中重写OnConfiguring来指定提供者和配置字符串,可以使迁移工作,但是当其他地方需要不同的配置时,这会妨碍。 最终保持我的迁移命令和我的代码都工作变得非常复杂。 注意:我的DbContext与使用它的入口点不同,而且我的解决方案有多个启动项目。

entity framework4.2:获取正确的数据库错误

在我的ASP.NET MVC 3应用程序中,我使用EF 4.2。 在我的数据库中,我对列有一个唯一的约束。 我尝试插入相同的数据,以便看到我得到的但我收到以下错误: 更新条目时发生错误。 有关详细信息,请参阅内部exception 在内部exception内部,我可以看到关于唯一约束的完整错误。 但是如何才能唯一地捕获此exception以告诉用户: 您再次输入相同的值。 这是我目前所做的事情: try { UpdateModel(conditionType, null, null, new string[] { “ConditionTypeId” }); _conditionTypeRepository.Save(); return RedirectToAction(“conditiontype”); } catch (Exception ex) { ModelState.AddModelError(“”, “There was an error while updating: ” + ex.Message); } 但这是一种通用方法。 我想做的是提供一个特定的消息。 有什么想法吗? 编辑: 我累了下面但是这次它没有抓住它: catch (SqlException ex) { if (ex.Number == 2627) { […]

获取“实体类型不是当前上下文模型的一部分。”

我在使用web api在asp.net中一次更新我的数据库1列时遇到此问题。 我试图查询PUT只是更新行中的一个值而不是更新那个值并将其余值设置为null。 我在控制器之外做了一个单独的模型来接受更新,所以我可以一次做一个。 当我点击这一行db.Entry(user).State = EntityState.Modified; 在控制器中,它出错了。 有什么建议我可以解决这个问题吗? 这是我在put方法中使用的单独的ViewModel: namespace WebAPI.Models.ViewModels { public class UserViewModel { public string FirstName { get; set; } public string LastName { get; set; } } } 这是我的控制器在我的参数中使用ViewModel调用方法: public HttpResponseMessage PutUser(int id, UserViewModel user) { HttpResponseMessage response; if (db.User.IsInRole(“Admin”)) { try { db.Entry(user).State = EntityState.Modified; db.SaveChanges(); } catch (DbUpdateConcurrencyException) […]

删除多个到多个entity framework

Artist和ArtistType之间存在多对多的关系。 我可以轻松添加艺术家ArtistType如下所示 foreach (var artistType in this._db.ArtistTypes .Where(artistType => vm.SelectedIds.Contains(artistType.ArtistTypeID))) { artist.ArtistTypes.Add(artistType); } _db.ArtistDetails.Add(artist); _db.SaveChanges(); 这将使用正确的映射更新多对多关联表。 但是,当我尝试从表中删除任何项目时,我没有得到任何错误,但它没有从表中删除它? foreach (var artistType in this._db.ArtistTypes .Where(at => vm.SelectedIds.Contains(at.ArtistTypeID))) { artistDetail.ArtistTypes.Remove(artistType); } this._db.Entry(artistDetail).State = EntityState.Modified; this._db.SaveChanges(); 我错过了什么?

EF 4.1 OnModelCreating未调用

我有一个问题,EF 4.1没有调用OnModelCreating所以我可以配置表等我有一个现有的数据库。 这是我的连接字符串: 这是我inheritance自DbContext类: public class AcmeDBContext : DbContext { public AcmeDBContext() : base() { Database.SetInitializer(null); } protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Conventions.Remove(); modelBuilder.Conventions.Remove(); modelBuilder.Entity().ToTable(“tblVehicle”); modelBuilder.Entity().ToTable(“tblVehicleMake”); modelBuilder.Entity().ToTable(“tblVehicleModel”); base.OnModelCreating(modelBuilder); } } 我已经在线阅读和阅读,但我不能指出问题所在。 永远不会调用OnModelCreating ,因此在我尝试查询任何内容时,当前上下文中不存在实体/类(Vehicle,VehicleMake,VehicleModel)的exception。

在代码第一entity framework中将DbContext转换为Datatable

您好我正在尝试将DbContext结果转换为DataTable 。 我有一个class即inherits DbContext ClientTemplateModel 。 在这个类中,我有一个DbSet对象,即public virtual DbSet ImageComments { get; set; } public virtual DbSet ImageComments { get; set; } public virtual DbSet ImageComments { get; set; } 。 我正在使用Code第一个entity framework 。 这是我的查询。 using (ClientTemplateModel context = new ClientTemplateModel(connectionString)) { var result = context.ImageComments.Where(p => p.Dcn == dcn).OrderByDescending(p => p.CommentsDateTime); } 在这里,我想将result转换为DataTable 。 […]