Tag: entity framework

linq中的动态表名

我正在尝试使用动态表名执行一些LINQ命令。 例如,而不是: var o = (from x in context.users select x); 我想使用类似的东西: var o = (from x in getTableObjectByName(“users”, context) select x); 或多或少。 这是我到目前为止的代码,它编译和运行: using (MySiteEntities ipe2 = new MySiteEntities()) { var propinfo1 = Type.GetType(“MySiteNamespace.MySiteEntities”).GetProperty(“users”); var propval1 = propinfo1.GetValue(ipe2, null); } 运行,但始终返回零记录。 users表最肯定包含记录,在任何情况下,当我使用上面的第一种方法直接调用它时,我会按预期获得所有记录。 如何修改我的代码以实际记下记录,而不仅仅是空集合? 编辑:我也试过这个: using (MySiteEntities ipe = new MySiteEntities()) { var prop = […]

存储库模式,POCO和业务实体

我知道存储库模式上已经存在很multithreading,但不知怎的,我觉得我的问题有点不同。 也许是因为昨天是我第一次听说POCO这个词。 我的问题是 – 通常,我在我的业务实体中添加和保存方法。 假设我正在编写Q / A网站,并且我有以下实体:问题,答案和评论。 如果我想使用存储库模式,我基本上只需要保留业务实体中的属性(例如,问题),并将我的操作移动到存储库类(例如,QuestionRepository),对吧? 如果这是真的,那么POCO是指具有属性的商业实体吗? 我正在使用Entity Framework 4.0,后者在edmx代码中创建了我的实体。 如果我想使用存储库模式,那么就不需要编写我自己的业务实体(问题,答案等),因为它们已经由EF生成了,对吧? 我需要的只是存储库来做CRUD? 我将为这个例子提供三个存储库,每个实体一个存储库?

优化entity framework查询

我正在尝试在我自己的时间制作一个stackoverflow克隆来学习EF6和MVC5,我目前正在使用OWin进行身份validation。 当我有50-60个问题的时候一切正常,我使用Red Gate数据生成器并尝试将其增加到100万个问题,并且几千个子表行没有任何关系只是为了“压力”ORM一点。 这是linq的样子 var query = ctx.Questions .AsNoTracking() //read-only performance boost.. http://visualstudiomagazine.com/articles/2010/06/24/five-tips-linq-to-sql.aspx .Include(“Attachments”) .Include(“Location”) .Include(“CreatedBy”) //IdentityUser .Include(“Tags”) .Include(“Upvotes”) .Include(“Upvotes.CreatedBy”) .Include(“Downvotes”) .Include(“Downvotes.CreatedBy”) .AsQueryable(); if (string.IsNullOrEmpty(sort)) //default { query = query.OrderByDescending(x => x.CreatedDate); } else { sort = sort.ToLower(); if (sort == “latest”) { query = query.OrderByDescending(x => x.CreatedDate); } else if (sort == “popular”) { […]

如何在执行之前将Entity Framework包装起来拦截LINQ表达式?

我想在执行之前重写LINQ表达式的某些部分。 而且我在将重写器注入正确的位置时遇到了问题(实际上完全没有)。 查看entity framework源(在reflection器中)它最终归结为IQueryProvider.Execute ,它在EF中通过ObjectContext耦合到表达式,提供internal IQueryProvider Provider { get; } 属性。 所以我创建了一个包装类(实现IQueryProvider )来在调用Execute时执行Expression重写,然后将其传递给原始的Provider。 问题是, Provider背后的字段是private ObjectQueryProvider _queryProvider; 。 这个ObjectQueryProvider是一个内部密封类 ,这意味着不可能创建一个提供添加重写的子类。 因此,由于非常紧密耦合的ObjectContext,这种方法让我陷入了死胡同。 如何解决这个问题呢? 我看错了方向吗? 有没有办法让自己注入这个ObjectQueryProvider ? 更新 :虽然提供的解决方案在您使用存储库模式“包装”ObjectContext时都能正常工作,但是允许从ObjectContext直接使用生成的子类的解决方案将更可取。 因此保持与Dynamic Data脚手架兼容。

entity frameworkDB-First,实现inheritance

我正在尝试使用entity framework6.0和数据库第一种方法实现inheritance。 好吧,假设我有一个人和Organization实体,如下所示: // a simplified version of organization entity public class Organization { public Guid ID { get; set; } public string Nickname { get; set; } public string Email { get; set; } public string PhoneNumber { get; set; } public string OfficialName { get; set; } public Guid CEOID { get; set; […]

配置多个数据库entity framework6

在我的解决方案中,我有两个使用Entity Framework 6的项目。每个项目指向不同的数据库,两者都使用相同的数据提供 – SQL Server。 我的解决方案中的第三个项目需要使用这两个数据库。 我的问题是如何配置这些上下文。 我尝试在单独的程序集中创建配置类: namespace OSAD_Base { class EfDbConfiguration : DbConfiguration { public EfDbConfiguration() { SetProviderServices(SqlProviderServices.ProviderInvariantName, SqlProviderServices.Instance); } } } 并在每个上下文类中引用此配置: namespace IntegrationDb { [DbConfigurationType(“OSAD_Base.EfDbConfiguration, OSAD_Base”)] public partial class IntegrationEntities : DbContext { public IntegrationEntities(string connectionString) : base(connectionString) { } } } 初始化我的第一个时,所有工作都正确,但是当第二个上下文初始化时(顺序无关紧要)我得到并且错误: 设置了’EfDbConfiguration’的实例,但是在与’B1Entities’上下文相同的程序集中未发现此类型。 将DbConfiguration类型放在与DbContext类型相同的程序集中,在DbContext类型上使用DbConfigurationTypeAttribute指定DbConfiguration类型,或在配置文件中设置DbConfiguration类型。 有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkId=260883。* 我还试图在我的app.config(启动项目)中创建一个entityframework部分,但是出现了以下错误: 配置系统无法初始化 无法识别的配置部分entityFramework 如何在同一解决方案中使用2个独立的EF项目?

entity framework更新多对多关系:虚拟与否

我一年以来一直在使用EF4(不是代码优先),所以我真的不是它的专家。 我对使用保存n更新的多对多关系表示怀疑。 我在stackoverflow上找到了某个地方(我再也找不到url),一个解决方案 – 更新现有的多对多关系 – 就是不要声明“虚拟”属性; 但是,如果我这样做,引擎无法轻松加载数据。 你能解释一下原因吗? Otherwire,你能帮我找一些关于这个主题的很酷的文档吗? 谢谢

并行不适用于Entity Framework

我有一个ID列表,我需要在每个ID上运行几个存储过程。 当我使用标准的foreach循环时,它工作正常,但是当我有很多记录时,它的工作速度很慢。 我想将代码转换为与EF一起使用,但我得到一个例外:“底层提供程序在Open上失败”。 我在Parallel.ForEach中使用此代码: using (XmlEntities osContext = new XmlEntities()) { //The code } 但它仍然抛出exception。 任何想法我如何使用与EF并行? 我是否需要为我正在运行的每个程序创建一个新的上下文? 我有大约10个程序,所以我认为创建10个上下文非常糟糕,每个上下文一个。

entity framework中的重复关键exception?

我正在尝试捕获当我将具有给定用户名的已存在用户插入我的数据库时抛出的exception。 正如标题所说,那时我正在使用EF。 当我尝试将用户插入到db时抛出的唯一exception是“UpdateException” – 如何提取此exception以识别它是重复的exception还是其他什么?

调试AzureFunction以及部署azure函数时缺少ProviderName

我有一个问题是让DbContext正确地从我的local.settings.json提取连接字符串 语境: 这是一个Azurefunction项目 主要问题代码在System.Data.Entity.Internal.AppConfig 虽然我有一个local.settings.json文件,但这不是dotnet核心。 这是.net 4.6.1 错误信息: ‘应用程序配置文件中的连接字符串’ShipBob_DevEntities’不包含必需的providerName属性。“’ Json配置: { “IsEncrypted”: false, “Values”: { “AzureWebJobsStorage”: “”, “AzureWebJobsDashboard”: “” }, “ConnectionStrings”: { “ShipBob_DevEntities”: { “ConnectionString”: “metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string=’data source=***;initial catalog=***;persist security info=True;User Id=***;Password=***;;multipleactiveresultsets=True;application name=EntityFramework'”, “providerName”: “System.Data.EntityClient” } } } 测试的配置版本: 将提供程序名称移动到实际的ConnectionString标记值:相同的错误ocurrs 将ConnectionString属性中的provider属性设置为EntityClient :这没有做任何事情 使ShipBob_DevEntities成为一个字符串值= ConnectionString的值:这会引发新的错误,其中包括 不支持关键字元数据 我尝试使用ADO连接字符串,它抛出code firstexception,这似乎是在database first一种方法中连接字符串不正确时发生的。 我冒昧地使用dotPeek反编译EntityFramework.dll并将问题追溯到System.Data.Entity.Internal.LazyInternalConnection.TryInitializeFromAppConfig 。 在这个方法中,有一个对LazyInternalConnection.FindConnectionInConfig的调用,它调出一个ConnectionStringSettings对象,该对象的ProviderName值设置为null。 不幸的是我无法调试它似乎用来生成这个值的AppConfig.cs类,所以我被卡住了。 到目前为止,我已经查阅了这两篇文章。 其中一个规定将提供者名称作为自己的令牌; […]