Tag: dbcontext

dbcontext和objectcontext中的NULL处理

我有这个简单的LINQ查询 from e in Employees where e.DesignationID !=558 select e 这里的DesignationID是一个可以为空的字段: 在objectcontext ,查询被转换为: SELECT [Extent1].[EmployeeID] AS [EmployeeID], [Extent1].[EmployeeCode] AS [EmployeeCode], [Extent1].[EmployeeName] AS [EmployeeName], [Extent1].[DesignationID] AS [DesignationID] FROM [dbo].[setupEmployees] AS [Extent1] WHERE 558 [Extent1].[DesignationID] 虽然dbcontext的相同查询被翻译为: SELECT [Extent1].[EmployeeID] AS [EmployeeID], [Extent1].[EmployeeCode] AS [EmployeeCode], [Extent1].[EmployeeName] AS [EmployeeName], [Extent1].[DesignationID] AS [DesignationID] FROM [dbo].[setupEmployees] AS [Extent1] WHERE NOT ((558 = […]

如何指定DbContext使用的表的名称

这是我之前提出的问题的后续问题 。 我的印象是,如果数据库中有多个表,则将使用DbSet变量的名称来标识该表。 然而,在链接的问题中,很明显DbContext正在选择Products表而不是Portfolio表,即使变量的名称是Portfolio 。 我仍然可以将变量名称更改为任何内容,我仍然可以获取数据。 所以我的问题是DbContext如何映射表? 我需要在项目中添加更多的表,并且不知道如何使用单个DbContext对象(或者我应该在同一个数据库中为单独的表使用单独的DbContext )?

如何为使用存储库的所有实例使用一个数据库上下文?

我做了一些建筑MVC错误,因为我不知道 IEntityChangeTracker的多个实例不能引用实体对象。 错误。 我的设置如下:我有一个访问数据库的repository ,它创建了一个dbcontext实例,我有控制器实例化他们需要的managers , managers都实例化他们自己的repository 。 这是问题,当控制器使用多个manager收集数据然后尝试创建使用此数据的对象时,将对象添加到dbcontext时会出现上述错误。 我读到了关于UnitOfWork模式的内容,但重新构建我的代码似乎需要做很多工作。 是否有快速修复能够更新数据库并避免错误? 谢谢。

ASP.NET Boilerplate多个数据库和DbContexts

我想使用ASP.NET Boilerplate一次连接到两个数据库。 我按照这个例子: https : //github.com/aspnetboilerplate/aspnetboilerplate-samples/tree/master/MultipleDbContextEfCoreDemo 问题是只有第一个上下文会包含所有的Abp表。 第二个上下文是现有数据库,其上没有任何Abp表。 当我启动网络应用程序时,我得到了这个: System.Data.SqlClient.SqlException: ‘Invalid object name ‘AbpLanguages’.’ 显然它正在寻找第二个上下文中的Abp *表,但它们不存在(并且它们不应该存在)。 那么,拥有多个上下文的正确方法是什么,以便它不会在第二个上下文中查找Abp *表? 更新 我通过修改从模板生成的干净的ASP.NET Boilerplate项目创建了一个示例应用程序。 我已经使用从API模板生成的项目进行了测试,该项目仅使用API​​,并且在那里完美运行。 但是当在生成项目时组合API和前端时,我遇到了在其他上下文中查找Abp *表的问题。 Dropbox: https ://www.dropbox.com/s/19gj8ms0jwz500k/4.0.1.zip ? dl = 0 Github: https : //github.com/FrikkinLazer/MultipleContext.git

从控制器更新DbSet 项的值 – C#,MVC,Code First

这是我的问题:我有一个MVC3 C#应用程序,我需要从编辑控制器更新DbSet中的值,因此T项的值将被替换为新值。 我不想删除该项目并再次添加。 我无法弄清楚如何做到这一点。 DbSet似乎没有像索引那样的东西。 这是我的编辑控制器: public class ItemController : Controller { private SESOContext db = new SESOContext(); private FindQrs fqr = new FindQrs(); [HttpPost] public ActionResult Edit(Item item) { if (ModelState.IsValid) { db.Entry(item).State = EntityState.Modified; Qr qr = fqr.FindQr(item.QR); // update somewhere here db.SaveChanges(); return RedirectToAction(“Index”); } ViewBag.SetID = new SelectList(db.Sets, “SetID”, “Name”, item.SetID); […]

与Linq一起使用DbContext时执行AS

我正在设计一个多租户数据库,每个租户都有一个相应的数据库用户。 为用户分配与租户关联的架构的访问权限以及dbo架构中对象的特定权限。 一旦我确定了租户,我想通过执行如下所示的SQL语句切换到适当的用户上下文: EXECUTE AS User = ‘Tenant1’ WITH NO REVERT 当我使用DbContext的Database属性的ExecuteSqlCommand执行此命令时,一切似乎都正常工作。 当我稍后使用Linq更改模型并调用该方法时 myDbContext.SaveChanges(); 我得到一系列例外情况: 在提供程序连接上启动事务时发生错误。 有关详细信息,请参阅内部exception 内部例外: 当前命令发生严重错误。 结果(如果有的话)应该被丢弃。 是否有可能以这种方式更改用户的执行上下文,如果是这样,最好的方法是什么?

DbContext类的IDbSet属性的适配器模式

有没有办法使用此答案中描述的方法IDbSet上没有FindAsync()方法DbContext的DbSet属性? 编辑: 链接的答案包含如何构建inheritance自IDbSet的接口以及添加对DbSet类的SearchAsync方法的支持的描述。 我理解Keith Payne编写的所有内容,但我不知道如何在DbContext中使用它。 例如,我有一个看起来像这样的DbContext: public class MyContext : DbContext { public DbSet Customers { get; set; } } 我如何使用MyDbSet(答案中描述的类)或类似的类,而不是DbSet? public class MyContext : DbContext { public MyDbSet Customers { get; set; } } 问题是,Entity Framework似乎只为IDbSet或DbSet类型的属性生成表。

如何修复“在上一个操作完成之前在此上下文中启动的第二个操作……”在使用依赖项注入时?

从数据库中读取数据时,我收到此错误: 在上一个操作完成之前,在此上下文中开始第二个操作。 任何实例成员都不保证是线程安全的。 我有以下ApplicationContext.cs: public class ApplicationContext : Microsoft.EntityFrameworkCore.DbContext { public ApplicationContext(DbContextOptions options) : base(options) { } public DbSet MyClasses{ get; set; } } 以下ApplicationContextFactory.cs public class ApplicationContextFactory : IDesignTimeDbContextFactory { public ApplicationContext CreateDbContext(string[] args) { var builder = new DbContextOptionsBuilder(); var connection = “myConnectionString”; builder.UseSqlServer(connection); return new ApplicationContext(builder.Options); } } 以下ServiceLoader.cs(我声明DI): public static class […]

DBContext Find with Includes – 其中lambda带有主键

我正在编写一个通用存储库来使用DBContext与EF进行交互。 我有一个通用的Get()方法,它接收主键值并返回实体: public class DALRepository : IDisposable, IGenericRepository where DALEntity : class { private IDbSet dbSet; private NWEntities context; public DALRepository() { context = new NWEntities(); context.Configuration.LazyLoadingEnabled = false; dbSet = context.Set(); } 这是一个简单的get方法 – 只适用于PK – 正是我想要的。 public DALEntity Get(string ID) { return dbSet.Find(ID); } 我现在想要改变它以允许消费者传递包含列表 – 以及只返回他们可以请求返回订单的客户。 这是我遇到麻烦的地方。 如果我这样做: public DALEntity Get(string ID, […]

EF从Type中获取运行时记录列表

目的:我需要循环所有记录,如: var records = db.Set().ToList(); 然后循环 foreach (var record in records) { // do something with the record } 但是它必须在运行时没有特定类型,因为我要遍历类型,因此不知道示例“UserAccount”。 只有Type / TypeOf? 在本说明书的底部,我有一个方法loopAllEntities ,我找不到工作方式 我用一些实体创建了一个DbContext。 public class MyEntities : DbContext { public DbSet UserAccounts { get; set;} public DbSet UserRoles { get; set; } public DbSet UserAccountRoles { get; set; } } 定义了一个Type列表来控制输出: public […]