Tag: entity framework

LINQ to Entities Any()和Contains()以小列表运行缓慢

我正在使用EF 6从数据库中获取产品。 产品类别在产品上映射为导航属性,数据来自ProductCategory数据透视表。 类别的工作方式类似于树(即每个类别都可以有子类别),但只有最具体的产品子类别关系存储在数据透视表中。 例如,假设有类似路径,如下所示: 电子产品>音频>放大器>集成放大器。 作为集成放大器的产品在数据透视表中具有其产品ID和集成放大器类别ID的记录。 我需要按类别进行过滤,但即使按父类别过滤,产品也应该显示,例如,集成放大器应显示在放大器列表中。 所以首先我列出相关的类别ID。 (这涉及对类别表的单独查询,但不需要很长时间。)如果类别filter是放大器,则列表是放大器的ID和集成放大器的ID。 问题是,当我包含filter时,产品查询需要10到20倍的时间: List currentCategoryIdAndChildren = BuildCategoryIdList(currentCategoryId); using (var db = new myContext()) { var products = db.Products .Select(p => new Product_PL { id = p.ID, name = p.Name, description = p.Description, categories = p.Categories .Select(c => new Category_PL { categoryid = c.ID, }), }); // Filter […]

已经处理了ObjectContext实例 – Winforms Entity Framework

我试图解决这个问题,并阅读有关此错误的内容,但无法找出解决方案。 我正在使用Entity框架为一个简单的Products Categories场景构建一个winforms应用程序。 这是我的模型的快照。 ProductService类中检索所有产品的代码是 public static List GetAllProducts() { List products = new List(); using (var entity = new SUIMSEntities1()) { products = (from p in entity.Products select p).ToList(); return products; } } 后面的产品代码中的代码是 List prods=ProductServices.GetAllProducts(); dgvProducts.DataSource = prods; 当我尝试在datagridview中加载Products时,会显示以下错误: 你能告诉我是什么原因造成的吗? 编辑: Include完成了诀窍,在这个特定场景中,我更改了GetAllProducts(),如下所示 public static List GetAllProducts() { using (var entity = new SUIMSEntities1()) […]

Moq DbSet NotImplementedException

我有一个直到最近一直工作的Moq DbSet,但是自上次更新依赖项以来,它一直在IQueryable.Provider NotImplementedException 。 代码使用如下: var mockSet = new Mock<DbSet>(); var list = new List(); var queryable = list.AsQueryable(); mockSet.As<IQueryable>().Setup(m => m.Provider).Returns(queryable.Provider); mockSet.As<IQueryable>().Setup(m => m.Expression).Returns(queryable.Expression); mockSet.As<IQueryable>().Setup(m => m.ElementType).Returns(queryable.ElementType); mockSet.As<IQueryable>().Setup(m => m.GetEnumerator()).Returns(() => queryable.GetEnumerator()); var f =mockSet.Object.FirstOrDefault(); // NotImplementedException thrown here 引发的exception如下: System.NotImplementedException The member ‘IQueryable.Provider’ has not been implemented on type ‘DbSet`1Proxy_1’ which inherits from […]

无法获取DbContext的reflection类型

在ASP Core 2.0 VS 2017中搭建控制器时,我得到以下内容: 无法获取DbContext的reflection类型: 微软.VisualStudio.Web.CodeGeneration.ActionInvoker.Execute(String [ ] args)at Microsoft.VisualStudio.Web.CodeGeneration.CodeGenCommand.Execute(String [] args) 这突然发生了,一个运行相同代码的同事没有遇到这个问题,我尝试了干净的构建,删除了每个项目中的bin和obj文件夹,删除了数据库,但我似乎无法解决这个问题,非常感谢任何帮助。 模型: public class SettingType : BaseModel { public int SettingTypeId { get; set; } public string SettingTypeDescription { get; set; } public string SystemCode { get; set; } }

在Entity Framework中使用Fluent API创建多对多关系

使用Entity Framework的API我会不断发现以下两种方式来映射多对多的关系? 我从未使用过第二种选择……有什么区别? 选项1: modelBuilder.Entity() .HasMany( p => p.Lessons) .WithMany(); 选项2: modelBuilder.Entity() .HasMany(p => p.Lessons) .WithMany() .Map(m => { m.MapLeftKey(“Id”); m.MapRightKey(“Id”); m.ToTable(“StudentAndLessons”); }); MapLeftKey和MapRightKey做了什么? 你何时会使用它并获得了哪些好处?

EF1中的动态实体/运行时更改模型/动态添加属性

我想让用户可以在运行时动态添加新列。 我正在使用Entity框架v1 … 我确实设法读取为xml,然后更改ssdl,csdl和msl文件并构造新的工作空间和新的对象上下文……但问题是当我在EF模型中动态添加新列时,基础对象当然没有改变。 如何在没有具体实体的情况下从模型中获取数据? 匿名类型或DBDataRecord就好了……甚至在运行时创建了一些新类型…… 任何的想法 ?

使用Simple Injector将依赖项注入OWIN Middleware和每个Web请求

我试图找出如何最好地将我的所有依赖项注入我为Web API应用程序编写的自定义OWIN中间件。 一个简单的例子就是我正在使用的DbContext。 我有一些中间件需要根据请求进行潜在查询。 我遇到的问题是我希望我的DbContext具有WebApiRequestLifestyle范围。 我的DbContext注册如下: container.Register(Lifestyle.Scoped); 显然,这不起作用: container.Options.DefaultScopedLifestyle = new WebApiRequestLifestyle(); 因为我需要在我的中间件中使用MobileDbContext,例如: app.CreatePerOwinContext(() => { return container.GetInstance(); }; 我尝试了一种混合生活方式,但这也没有用,因为我不认为中间件在技术上是不属于“范围”生活方式的东西。 我想,它可能更接近单身人士。 有没有更好的方法来设计我的应用程序,以避免这个问题或通过某种自定义范围的生活方式解决它?

entity framework代码第一次迁移和Firebird

我正在尝试在Firebird 2.5数据库上启用迁移。 我正在使用VS2015并且ADO驱动程序和实体提供程序已安装并正常运行。 我对数据库进行了逆向工程,进行了必要的更改以使其工作。 我可以在程序包管理器控制台上执行启用迁移,并添加迁移。 当我做update-database时会发生这种情况: PM> update-database Specify the ‘-Verbose’ flag to view the SQL statements being applied to the target database. Applying explicit migrations: [201705301505265_Initial]. Applying explicit migration: 201705301505265_Initial. ScriptHalted 如果我做更新数据库-Verbose我得到这个: PM> update-database -Verbose Using StartUp project ‘Visao.Web’. Using NuGet project ‘Visao.Data’. Specify the ‘-Verbose’ flag to view the SQL statements being applied […]

多个数据库,模型略有变化。 如何允许Entity Framework在运行时删除列?

这是对“ 具有轻微变化模型的多个数据库的跟进。如何允许EF在运行时使用不同的数据库结构? ”问题: 我正在使用.NET4.5 , MSSQL , Oracle , .NET4.5在全公司(许多部门)全球使用的系统上查询属于我们部门的不同数据库,这些数据库大多数是相同的EF模型,一些数据库是Oracle和一些是Microsoft SQL ,有些是开发或uat,有些是日志。 我正在为Oracle和MSSQL数据库使用不同的EF模型。 一个要求是在运行时在数据库之间切换,这很容易, public AggregatorEntities(string connectionString) : base(connectionString) { } 但它确实有副作用 – 许多数据库(dev,uat,dr,logs,…)与Live不同(模型是从Live生成的),这在查询这些数据库时会导致错误。 管理层了解情况,他们可以使用某个特定数据库的开发人员对全局查询系统进行更改,以便测试人员和uat查询数据。 但是,他们希望进行更改,以便花费最少的时间来完成此操作 – 因为每个涉及数据库更改的项目都需要额外的成本。 我基本上需要构建一个’可以处理所有’弹性系统,当一个人在EF更改数据库时,会做一些事情来适应特定的数据库。 有不同的故障情况: 1.表上列的名称相同但实体中的类型不同 2.表上没有列,但EF中有一个实体 3.桌面上不在EF上的其他列 4.数据库中不在EF模型中的其他表 5.数据库中没有表,但EF模型中有实体。 这是在运行时删除EF模型但不在数据库中的列的情况(上面的第3点)。

如何解决“多重性在角色中无效”错误?

我有以下型号: public class Retailer : Entity { public string Name { get; set; } public string Address { get; set; } public virtual ICollection Products { get; set; } public virtual ICollection Customers { get; set; } } public class Product : Entity { public string Name { get; set; } public string Description { […]