Questions tagged «entity-framework»

有关ADO.NET实体框架的问题,请参阅.NET Framework的对象关系映射(ORM)工具。如果适用,请添加特定于版本的标签。请勿对实体框架核心问题使用此标签。请改用entity-framework-core。

1
Database.BeginTransaction与Transactions.TransactionScope
System.Transactions.TransactionScope和EF6和有什么不一样Database.BeginTransaction? 有人可以举一个很小的例子,或者只是解释一个明显的区别时使用哪个? PS:在我的项目中,我正在使用EF6。我已经阅读了文档,但并没有太大帮助。还查看了示例,但它们正在使用SqlConnection.BeginTransaction,现在MSDatabase.BeginTransaction在EF6中引入了此新功能。

7
在Linq Select中创建元组
我正在使用C#和.NET Framework 4.5.1,使用Entity Framework 6.1.3从SQL Server数据库中检索数据。 我有这个: codes = codesRepo.SearchFor(predicate) .Select(c => new Tuple<string, byte>(c.Id, c.Flag)) .ToList(); 当我运行它时,我收到以下消息: LINQ to Entities仅支持无参数构造函数和初始化程序。 我不知道如何创建元组,因为我发现的所有示例大多都与此类似。 我已经试过了: codes = codesRepo.SearchFor(predicate) .Select(c => Tuple.Create(c.Id, c.Flag)) .ToList(); 并得到这个错误: LINQ to Entities无法识别方法'System.Tuple`2 [System.String,System.Byte] Create [String,Byte](System.String,Byte)'方法,并且该方法无法转换为商店表达式。 哪里有问题?

10
术语“ scaffold-dbcontext”未被识别为cmdlet,函数,脚本文件或可运行程序的名称
当尝试使用asp.net core搭建支架时,此命令 “ scaffold-dbcontext”数据源=(本地);初始目录= MyDb;集成安全性= True;“ Microsoft.EntityFrameworkCore.sqlserver -outputdir模型 给出此错误。 scaffold-dbcontext:术语“ scaffold-dbcontext”不能识别为cmdlet,函数,脚本文件或可运行程序的名称。检查名称的拼写,或者是否包含路径,请验证路径是否正确,然后重试。在第1行:char:1 + scaffold-dbcontext“ Data Source =(local); Initial Catalog = MyDB; In ... + ~~~~~~~~~~~~~~~~~ + + CategoryInfo: ObjectNotFound:(scaffold-dbcontext:String)[],CommandNotFoundException + FullyQualifiedErrorId:CommandNotFoundException 我在这里尝试过该解决方案,但对我不起作用。 知道原因/可能是什么?

5
是否可以检查对象框架中是否已将对象附加到数据上下文?
当尝试通过以下方式附加已附加到给定上下文的对象时,出现以下错误context.AttachTo(...): 具有相同键的对象已存在于ObjectStateManager中。ObjectStateManager无法使用相同的键跟踪多个对象。 有没有办法实现以下目标: context.IsAttachedTo(...) 干杯! 编辑: Jason概述的扩展方法很接近,但不适用于我的情况。 我正在尝试使用另一个问题的答案中概述的方法来做一些工作: 如何使用Linq to Entities从表中删除一个或多个行,而无需先检索行? 我的代码看起来像这样: var user = new User() { Id = 1 }; context.AttachTo("Users", user); comment.User = user; context.SaveChanges(); 这工作正常,除非当我为该用户执行其他操作时,我使用相同的方法并尝试附加虚拟User对象。这失败了,因为我之前已经附加了该虚拟用户对象。我该如何检查?

10
使用Linq to Entities的“ Contains()”解决方法?
我正在尝试创建一个查询,该查询使用Silverlight ADO.Net数据服务客户端api(并因此使用Linq To Entities)在where子句中使用ID列表。有人知道不支持“包含”的解决方法吗? 我想做这样的事情: List<long?> txnIds = new List<long?>(); // Fill list var q = from t in svc.OpenTransaction where txnIds.Contains(t.OpenTransactionId) select t; 试过这个: var q = from t in svc.OpenTransaction where txnIds.Any<long>(tt => tt == t.OpenTransactionId) select t; 但是得到了“不支持方法'Any'”。

3
实体框架SaveChanges()与SaveChangesAsync()和Find()与FindAsync()
我一直在寻找以上两对之间的差异,但是没有找到任何清楚地解释它以及何时使用一个或另一个的文章。 那么SaveChanges()和之间有什么区别SaveChangesAsync()? 在Find()和之间FindAsync()? 在服务器端,当我们使用Async方法时,我们还需要添加await。因此,我认为它在服务器端不是异步的。 它仅有助于防止UI在客户端浏览器上阻塞吗?还是它们之间有什么优缺点?

21
自创建数据库以来,支持“ ApplicationDbContext”上下文的模型已更改
首先,在其他任何地方都没有看到此错误,我想这不是重复错误,因此请先阅读整个情况。 一切工作都很好,然后我尝试更新我的一个模型类(App类,现在对更新进行评论),我将在下面列出。和繁荣我有这个丑陋的错误。 自创建数据库以来,支持“ ApplicationDbContext”上下文的模型已更改。考虑使用“代码优先迁移”来更新数据库(http://go.microsoft.com/fwlink/?LinkId=238269)。System.Data.Entity.CreateDatabaseIfNotExists1.InitializeDatabase(TContext context) at System.Data.Entity.Internal.InternalContext.<>c__DisplayClassf上的System.Data.Entity.Internal.InternalContext.PerformInitializationAction(b)处的System.Data.Entity.Internal.InternalContext.PerformDatabaseInitialization()处的Action动作。 System.Data.Entity.Internal.RetryAction 1.PerformAction(TInput input) at System.Data.Entity.Internal.LazyInternalContext.InitializeDatabaseAction(Action1动作的Internal.LazyInternalContext.b__4(System.Data.Entity.Internal.LazyInternalContext.InitializeDatabase()的System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type)实体类型)位于System.Data.Entity.Internal.Linq.InternalSet1.Initialize() at System.Data.Entity.Internal.Linq.InternalSet1.System.Data.Entity.Infrastructure.DbQuery的1.Include(String路径),Microsoft.AspNet.Identity的1.Include(String path) at System.Data.Entity.QueryableExtensions.Include[T](IQueryableSystem.Data.Entity.QueryableExtensions.Include [T,TProperty](IQueryable 1 source, Expression1路径)处的String路径。6.GetUserAggregateAsync(ExpressionMicrosoft.AspNet.Identity.EntityFramework.UserStore 6.FindByNameAsync(String userName) at Microsoft.AspNet.Identity.UserManager2.FindByNameAsync(String userName)在Microsoft.AspNet.Identity.UserManager`2.d__12.MoveNext()的EntityFramework.UserStore 1筛选器)---从上一个位置开始的堆栈跟踪结束在d的System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)的System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)的ControlPanel.Web.Controllers.AccountController.d__2.MoveNext()中引发了异常:\ Projects \ FULL \控制面板\ ControlPanel.Web \ Controllers \ AccountController.cs:第56行 起初我以为可能是迁移问题,所以我完全删除了数据库,重新启用了迁移,然后添加了Init迁移并使用 update-database -force -verbose 一切顺利,没有任何抱怨,但是,每当我尝试登录到我的网站时,我都会收到先前的错误。我无法解决问题大约做了十次迁移。 这是我的领域类(模型): public class App { [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public virtual …

4
应用程序的配置文件中的连接字符串'MyConnection'不包含必需的providerName属性。”
我用Entity Framework Code First, 我的连接字符串在配置文件中: <connectionStrings> <clear/> <add name="ApplicationServices" connectionString="Data Source=PC-X;Initial Catalog=MYdb;Integrated Security=True"/> </connectionStrings> 当我尝试访问数据(应该创建数据库的东西)时,出现以下错误: 应用程序的配置文件中的连接字符串'ApplicationServices'不包含必需的providerName属性。” 我想念什么?

8
如何在通用扩展方法中使用字符串列名称对IQueryable应用OrderBy?
public static IQueryable<TResult> ApplySortFilter<T, TResult>(this IQueryable<T> query, string columnName) where T : EntityObject { var param = Expression.Parameter(typeof(T), "o"); var body = Expression.PropertyOrField(param,columnName); var sortExpression = Expression.Lambda(body, param); return query.OrderBy(sortExpression); } 因为不是从sortExpression推断出OrderBy的类型,所以我需要在运行时指定如下类型: var sortExpression = Expression.Lambda<T, TSortColumn>(body, param); 要么 return query.OrderBy<T, TSortColumn>(sortExpression); 我认为这是不可能的,因为TSortColumn只能在运行时确定。 有没有解决的办法?

2
异步PartialView导致“ HttpServerUtility.Execute被阻止…”异常
我有一个局部视图试图IEnumerable<Post>使用异步从数据库中检索一个... 方法 public static class PostService { public static int PostsPerPage = 50; public static async Task<IEnumerable<Post>> GetRecentAsync(int page = 0) { return await entityFrameworkDbContext.Posts .ToListAsync(); } } 局部视图 public async Task<ActionResult> Recent(int page = 0) { return PartialView(await PostService.GetRecentAsync(page)); } 然后,如果我尝试称呼它 @Html.Action("Recent", "Post") 我得到以下异常 HttpServerUtility.Execute在等待异步操作完成时被阻止。 说明:执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其在代码中起源的更多信息。 异常详细信息:System.InvalidOperationException:HttpServerUtility.Execute在等待异步操作完成时被阻止。 为什么会出现此错误?不行吗

5
如何禁用代码优先迁移
我在EF5中有一个代码优先的实体模型。但是我想手动管理数据库更改-我不希望EF修改现有数据库及其所有数据。但是,当我在EF映射和数据库中进行并行更改时,EF拒绝正常运行,并告诉我需要先使用代码迁移。如何关闭此功能?

3
如何使用Entity Framework Code First Fluent API指定表名
我有一个实体,我要配置实体框架以将其映射到具有不同名称的数据库表。 我可以使用Code First DataAnnotations(DataAnnotations.Schema.TableAttribute)轻松地做到这一点。 但是由于现在的限制,我必须使用Code First Fluent API(我的域对象将由外部客户端使用,因此它们不应该是特定于技术的-例如,对DataAnnotations的任何引用) 我已经在MSDN上搜索了,但是什么也没找到。那么有可能吗? 谢谢。

5
如何强制Entity Framework始终从数据库获取更新的数据?
我正在使用EntityFramework.Extended库执行批处理更新。唯一的问题是EF无法跟踪该库执行的批量更新。因此,当我DbContext再次查询时,它不会返回更新的实体。 我发现AsNoTracking()在查询时使用method会禁用跟踪并从数据库中获取新数据。但是,由于EF无法跟踪使用查询的实体AsNoTracking(),因此我无法对查询的数据执行任何更新。 有什么方法可以强制EF在跟踪更改时获取最新数据?


5
减少存储库以汇总根
目前,我几乎为数据库中的每个表都拥有一个存储库,并希望通过减少DDD使其仅聚合根来进一步使自己与DDD保持一致。 假设我有下表User和Phone。每个用户可能有一个或多个电话。没有聚合根的概念,我可能会做这样的事情: //assuming I have the userId in session for example and I want to update a phone number List<Phone> phones = PhoneRepository.GetPhoneNumberByUserId(userId); phones[0].Number = “911”; PhoneRepository.Update(phones[0]); 集合根的概念比实际更容易在纸上理解。我将永远不会拥有不属于用户的电话号码,因此取消PhoneRepository并将电话相关的方法合并到UserRepository中是否有意义?假设答案是肯定的,我将重写先前的代码示例。 我可以在UserRepository上使用返回电话号码的方法吗?还是应该始终返回对用户的引用,然后遍历用户之间的关系以获取电话号码: List<Phone> phones = UserRepository.GetPhoneNumbers(userId); // Or User user = UserRepository.GetUserWithPhoneNumbers(userId); //this method will join to Phone 无论我以哪种方式获得电话,假设我修改了其中一部电话,如何进行更新?我有限的理解是,应该通过根目录更新根目录下的对象,这将使我朝下面的选择#1前进。尽管这可以很好地与Entity Framework一起很好地工作,但这似乎没有什么描述性,因为即使Entity Framework在图形中更改对象的选项卡上,阅读代码我也不知道我实际更新的内容。 UserRepository.Update(user); // …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.