草庐IT

AddOrUpdate

全部标签

c# - EntityFramework 6 AddOrUpdate 不适用于复合或复合主键

这个问题一直是我周末的噩梦...我有一个表,其中AddOrUpdate无法正常工作,它一直在添加但从不更新。我想做的就是当我使用AddOrUpdate将新实体添加到表中时,我希望它检查AppointmentId和CompletionCodeId列,如果匹配则更新,否则添加。表结构:CREATETABLE[dbo].[AppointmentCodes]([Id]INTIDENTITY(1,1)NOTNULL,[AppointmentId]INTNOTNULL,[Quantity]INTNOTNULL,[CompletionCodeId]INTNOTNULL,CONSTRAINT[PK_A

c# - C# 字典的原子 AddOrUpdate

假设如下代码:if(myDictionary.ContainsKey(aKey))myDictionary[aKey]=aValue;elsemyDictionary.Add(aKey,aValue);这段代码访问字典两次,一次是判断aKey是否存在,另一次是更新(如果存在)或者添加(如果不存在)。我想当这段代码只执行几次时,这种方法的性能是“可以接受的”。但是,在我的应用程序中,类似的代码大约执行了50万次。我分析了我的代码,它显示80%的CPU时间花在了这部分(见下图),因此这激发了改进。请注意,字典是lambdas。第一个解决方法很简单:myDictionary[aKey]=aV

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

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

c# - AddOrUpdate 未按预期工作并产生重复项

我正在使用基于代码优先DBContext的EF5设置。在DbMigrationsConfiguration.Seed中,我试图用默认的虚拟数据填充数据库。为完成此任务,我使用了DbSet.AddOrUpdate方法。最简单的代码来说明我的目标:j=0;varcities=new[]{"Berlin","Vienna","London","Bristol","Rome","Stockholm","Oslo","Helsinki","Amsterdam","Dublin"};varcityObjects=newCity[cities.Length];foreach(stringcincit

c# - AddOrUpdate 未按预期工作并产生重复项

我正在使用基于代码优先DBContext的EF5设置。在DbMigrationsConfiguration.Seed中,我试图用默认的虚拟数据填充数据库。为完成此任务,我使用了DbSet.AddOrUpdate方法。最简单的代码来说明我的目标:j=0;varcities=new[]{"Berlin","Vienna","London","Bristol","Rome","Stockholm","Oslo","Helsinki","Amsterdam","Dublin"};varcityObjects=newCity[cities.Length];foreach(stringcincit

c# - 并发字典 AddOrUpdate 与索引添加

在当前项目中,我通过两种方式为并发字典中的现有键赋值。一个。concurrentDictionary1[key]=value;和B.concurrentDictionary2.AddOrUpdate(key,value,(k,v)=>value);如果我知道“key”存在,这些功能是否等效?是否使用方法“A”绕过并发字典的并发保护?这里有什么区别?选择一个而不是另一个的原因是什么?我查看了msdn上的文档,他们似乎只使用方法“A”初始化并发字典,而不是更新它。 最佳答案 这是一个老问题,但没有人回答为什么要使用一个而不是另一个。如果

c# - 并发字典 AddOrUpdate 与索引添加

在当前项目中,我通过两种方式为并发字典中的现有键赋值。一个。concurrentDictionary1[key]=value;和B.concurrentDictionary2.AddOrUpdate(key,value,(k,v)=>value);如果我知道“key”存在,这些功能是否等效?是否使用方法“A”绕过并发字典的并发保护?这里有什么区别?选择一个而不是另一个的原因是什么?我查看了msdn上的文档,他们似乎只使用方法“A”初始化并发字典,而不是更新它。 最佳答案 这是一个老问题,但没有人回答为什么要使用一个而不是另一个。如果

c# - Entity Framework Code First AddOrUpdate 方法插入重复值

我有一个简单的实体:publicclassHall{[Key]publicintId{get;set;}publicstringName[get;set;}}然后在Seed方法中我使用AddOrUpdate来填充表:varhall1=newHall{Name="French"};varhall2=newHall{Name="German"};varhall3=newHall{Name="Japanese"};context.Halls.AddOrUpdate(h=>h.Name,hall1,hall2,hall3);然后我在包管理控制台中运行:Add-MigrationCurrentU

c# - Entity Framework Code First AddOrUpdate 方法插入重复值

我有一个简单的实体:publicclassHall{[Key]publicintId{get;set;}publicstringName[get;set;}}然后在Seed方法中我使用AddOrUpdate来填充表:varhall1=newHall{Name="French"};varhall2=newHall{Name="German"};varhall3=newHall{Name="Japanese"};context.Halls.AddOrUpdate(h=>h.Name,hall1,hall2,hall3);然后我在包管理控制台中运行:Add-MigrationCurrentU

c# - ConcurrentDictionary 陷阱 - 来自 GetOrAdd 和 AddOrUpdate 的委托(delegate)工厂是否同步?

ConcurrentDictionary的文档没有明确说明,所以我想我们不能期望委托(delegate)valueFactory和updateValueFactory同步执行(分别来自GetOrAdd()和AddOrUpdate()操作)。因此,我认为我们无法在不手动实现我们自己的并发控制的情况下实现对其中需要并发控制的资源的使用,也许只是对委托(delegate)使用[MethodImpl(MethodImplOptions.Synchronized)]。我说的对吗?或者ConcurrentDictionary是线程安全的,我们可以预期对这些委托(delegate)的调用会自动同步(
12