当EF或LINQ to SQL运行查询时,它: 从代码构buildexpression式树, 将expression式树转换为SQL查询, 执行查询,从数据库获取原始结果并将其转换为应用程序使用的结果。 看着堆栈跟踪,我不知道第二部分发生在哪里。 一般来说,是否可以使用EF或(最好是)LINQ to SQL的一个现有部分将Expression对象转换为部分SQL查询(使用Transact-SQL语法),或者我必须重新发明轮子? 更新:评论要求提供我想要做的一个例子。 其实, 下面Ryan Wright的回答完全说明了我想要达到的结果,除了我的问题是关于如何使用EF和LINQ to SQL实际使用的.NET Framework的现有机制来实现的 ,而不必重新发明轮子,并自己写成千行的未经过testing的代码来做类似的事情。 这也是一个例子。 再一次请注意,没有ORM生成的代码。 private class Product { [DatabaseMapping("ProductId")] public int Id { get; set; } [DatabaseMapping("Price")] public int PriceInCents { get; set; } } private string Convert(Expression expression) { // Some magic calls to .NET Framework code happen […]
我试图build立一个使用LINQ to Entities的search页面,但是下面的代码给了我一个关于lte没有识别'Boolean StartsWith()的运行时错误。 代码编译得很好。 我怎样才能解决这个问题比把StartsWith过滤出来存储到一个存储过程更好? return from dp in dents.DirectoryPersonEntrySet where ((dp.LastName.StartsWith(searchTerm, StringComparison.CurrentCultureIgnoreCase)) || (dp.Department.StartsWith(searchTerm, StringComparison.CurrentCultureIgnoreCase)) || dp.Extension.StartsWith(searchTerm, StringComparison.CurrentCultureIgnoreCase)) select dp;
在multithreading服务器中使用entity framework的最佳做法是什么? 我正在使用entity frameworkObjectContext来pipe理我所有的数据库操作,现在我知道这个上下文不是线程安全的,所以现在当我需要使用它来执行一些数据库操作时,我用lock语句把它包围起来是安全的。 这是我应该怎么做?
我试图用SQLite的entity framework。 我有问题集成到我的主要应用程序,所以我从头开始一个小testing,完全按照http://brice-lambson.blogspot.com/2012/10/entity-framework-on-sqlite.html 毕竟说完了,运行项目时出现以下错误: 找不到名称为“System.Data.SQLite”的ADO.NET提供程序的entity framework提供程序。 确保提供程序在应用程序configuration文件的“entityFramework”部分中注册。 有关更多信息,请参阅http://go.microsoft.com/fwlink/?LinkId=260882 。 我的app.config如下所示: <?xml version="1.0" encoding="utf-8"?> <configuration> <configSections> <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> <!– For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 –> </configSections> <entityFramework> <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" /> <providers> <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> </providers> </entityFramework> <system.data> <DbProviderFactories> <add name="SQLite Data Provider" […]
我在我的应用程序中使用EF。 我尝试保存\插入一个新的logging到映射表 并得到以下错误: Unable to update the EntitySet 'UsersLimitationToCountry' because it has a DefiningQuery and no <InsertFunction> element exists in the <ModificationFunctionMapping> element to support the current operation. 我应该自己在edmx中定义它吗? 怎么样?
我有4个项目: Toombu.Entities : all models are there Toombu.DataAccess: Mapping, Repository and ToombuContext Toombu.Logique : Logic of my application Toombu.Web : MVC 4 application. With all others DLL. 我试图启用Toombu.Web中的迁移,但我有这个错误: No context type was found in the assembly 我如何启用迁移?
我一直在玩EF,看看它能处理什么。 还有很多文章和文章解释了EF可以使用的各种场景,但是如果错过了“con”方面的话。 现在我的问题是, 在什么样的情况下,我应该远离entity framework ? 如果你在这个领域有一些经验,告诉我哪些情景不适合EF。 告诉我你遇到的一些不利因素,你希望你select了不同的技术。
当我用entity framework保存一个实体时,我自然认为它只会试图保存指定的实体。 但是,它也试图挽救该实体的子实体。 这导致了各种各样的完整性问题。 如何强制EF只保存我想要保存的实体,因此忽略所有子对象? 如果手动将属性设置为null,则会出现错误“操作失败:由于一个或多个外键属性不可空,因此无法更改关系。 这是非常适得其反的,因为我将子对象设置为null,所以EF会使它独立。 为什么我不想保存/插入子对象? 由于这是在评论中来回讨论的,所以我会给出一些理由,说明为什么我希望我的子对象留下。 在我构build的应用程序中,EF对象模型不是从数据库加载的,而是用作我在分析平面文件时填充的数据对象。 在子对象的情况下,这些对象中的许多指向定义父表的各种属性的查找表。 例如,主要实体的地理位置。 由于我自己填充了这些对象,因此EF假定这些对象是新对象,需要与父对象一起插入。 但是,这些定义已经存在,我不想在数据库中创build重复项。 我只使用EF对象进行查找,并在我的主表实体中填充外键。 即使使用真实数据的子对象,我也需要先保存父对象,然后获得主键或EF,但似乎只是把事情弄得一团糟。 希望这给一些解释。
Dapper之间有一些性能比较(似乎是最快,最受欢迎的“微型ORM工具”)。 现在是2014年9月,我们有Entity Framework 6(不是5或者4),而且Dapper还在。 我们将开始开发一个庞大的数据库n层应用程序(数据库有700个表)。 还有一些需要运行的查询是相当时间敏感的。 有没有人有任何关于EF 6.1.x的性能更新? 这涉及在DbContext中进行的一般查询。 我想我不能用Dapper使用格式良好的LINQ查询。 你有这方面的经验吗? 是否值得失去LINQ的额外速度? 小巧玲珑还在积极,不断发展吗? GitHub告诉我是的,但是与Subsonic一样,它可以相当快地改变。 把Dapper和EF混合起来是可行的还是可行的? 当我们需要速度时,小巧玲珑,否则EF。 谢谢!
我有一个应用程序,允许用户input他们花在工作上的时间,我试图获得一些良好的报告,这是利用LINQ to Entities。 由于每个TrackedTime都有一个TargetDate ,它只是DateTime的“Date”部分,所以按用户和date对时间进行分组相对比较简单(为简单起见,我省略了“where”子句): var userTimes = from t in context.TrackedTimes group t by new {t.User.UserName, t.TargetDate} into ut select new { UserName = ut.Key.UserName, TargetDate = ut.Key.TargetDate, Minutes = ut.Sum(t => t.Minutes) }; 由于DateTime.Month属性,用户和月份分组只是稍微复杂一点: var userTimes = from t in context.TrackedTimes group t by new {t.User.UserName, t.TargetDate.Month} into ut select new { UserName […]