草庐IT

Entity-Framework

全部标签

c# - 进行多次更新时如何避免在 Entity Framework 4 中锁定数据库

这个问题是关于使用MicrosoftEntityFramework处理许多插入或更新的最佳实践。问题是我们编写了一个长时间运行的程序,它从数据库中提取数千条记录,然后逐条更新每条记录的单个字段。令我们沮丧的是,我们意识到这些更新的记录中的每一个都在ObjectContext未被释放期间被锁定。下面是一些伪代码(实际上并没有运行)来说明:using(ObjectContextcontext=newObjectContext()){varmyRecords=context.CreateObjectSet().AsQueryable();foreach(varrecordinmyRecord

C# EF Code First 虚拟关键字,它有什么作用?

为什么我们在声明导航属性时需要使用“virtual”关键字?我知道CodeFirst框架以某种方式使用它来识别该属性是一个导航属性,但我想知道如何。具体来说,我想知道它与MSDN文档中针对“virtual”关键字的描述有何关系:http://msdn.microsoft.com/en-us/library/9fkccyh4(v=vs.80).aspx 最佳答案 在运行时,EntityFramework将为您生成所谓的代理实体。这些实体是派生自您的实体类型的动态创建类型的对象。这允许您将您的实体用作POCO,它是一个与EntityFr

c# - 使用最小起订量的同步方法测试 EF 异步方法

我有这个方法:publicasyncTaskDeleteUserAsync(GuiduserId){using(varcontext=this.contextFactory.Create()){varuser=awaitcontext.Users.FirstOrDefaultAsync(x=>x.Id.Equals(userId));if(user==null){thrownewException("Userdoesn'texist");}context.Users.Remove(user);awaitcontext.SaveChangesAsync();}}我想测试一下。所以我创建了

c# - 如何在 Entity Framework 4.1 的 Code-First Fluent API 中以编程方式定义关系

我正在玩弄新的EF4.1unicornlove。我正在尝试了解可以使用代码优先来以编程方式定义几个简单POCO之间的关系的不同方式。如何定义以下内容=>1Team有0-manyUser。(并且User在1个Team中)1User有0或1个Foo(但是Foo没有返回给User的属性)1User有1个UserStuff 最佳答案 这里有您正在寻找的示例:publicclassUser{publicintId{get;set;}...publicFooFoo{get;set;}publicTeamTeam{get;set;}publicU

c# - EF AddOrUpdate 种子不更新子实体

我在播种数据时遇到了一些问题,我能够通过一个非常小的应用程序重现该问题。假设你有这个种子方法:protectedoverridevoidSeed(JunkContextcontext){context.Junks.AddOrUpdate(x=>x.Name,newJunk(){Name="BANANAS!!",Item=newJunkItem(){Name="APPLES!!!"}});}当您在PMC中运行update-database时,所有实体都会成功创建。很好。但是当你想去更新数据库时,说你的种子方法现在是这样的:protectedoverridevoidSeed(JunkCon

c# - 使用 Linq Select 将实体映射到 DTO 的最简洁方法?

我一直在努力想出一种干净且可重用的方法来将实体映射到它们的DTO。这是我想出的例子以及我被困的地方。实体publicclassPerson{publicintID{get;set;}publicstringName{get;set;}publicAddressAddress{get;set;}//OtherpropertiesnotincludedinDTO}publicclassAddress{publicintID{get;set;}publicstringCity{get;set;}//OtherpropertiesnotincludedinDTO}DTOpublicclassP

c# - Entity Framework 的快照历史

我一直在研究EntityFramework的一些审计Hook。其中许多显示旧/新值比较。这对于审计跟踪非常有用,但我正在寻找快照对象。例如...假设我有一个管理产品的应用程序。一个产品有多个属性和关联的其他对象。假设我更改了一个对象10次。还可以说,我可以查看这些对象更改的屏幕(不是审计跟踪,而是屏幕以只读格式显示的实际情况)很重要。我感兴趣的是能够为所有10个更改(取决于我想看到的)检索原始EF产品对象(以及所有相关数据)并使用它绑定(bind)到我的屏幕。如果我使用的是SQLServer,现在我应该为序列化对象使用什么类型(XML、blob等)?这样做有意义吗?

c# - 我可以根据 .NET Framework 版本创建预处理器指令吗?

这是我想做的具体例子。考虑string.Join功能。在.NET4.0之前,只有两个重载,都需要一个string[]。参数。从.NET4.0开始,有新的重载采用更灵活的参数类型,包括IEnumerable.我有一个图书馆,其中包括Join本质上执行.NET4.0string.Join功能的功能功能确实如此。我只是想知道是否可以使此函数的实现依赖于目标.NET框架。如果是4.0,它可以简单地调用string.Join在内部。如果是3.5或更早版本,它可以调用自己的内部实现。这个想法有意义吗?如果确实有意义,那么最合乎逻辑的方法是什么?我想我只是假设预处理器指令最有意义,因为调用strin

c# - Microsoft Sync Framework COM 类错误

我一直在使用“MicrosoftSyncFramework2.1”将两个本地sqlserver2008数据库与一个asp.net项目同步。我的代码:SqlConnectionclientConn=newSqlConnection(@"Server=XXXXXX;UserID=sa;Password=xxxx;Database=ZzzClient");SqlConnectionserverConn=newSqlConnection("Server=XXXXXX;UserID=sa;Password=xxxx;Database=ZzzServer");SyncOrchestratorsyn

c# - 带有 Attach() 的 LINQ To SQL 异常 : Cannot add an entity with a key that is already in use

考虑这个典型的断开连接的场景:使用LINQToSQL从SQLServer加载客户对象用户编辑实体,表示层发回修改后的实体。数据层,使用L2S,必须将更改发送到SQLServer考虑这个LINQToSQL查询,其目的是获取客户实体。CustcustOrig=db.Custs.SingleOrDefault(o=>o.ID==c.ID);//gettheoriginaldb.Custs.Attach(c,custOrig);//wedon'thaveaTimeStamp=Truepropertydb.SubmitChanges();DuplicateKeyException:Cannota