Tag: upsert

entity framework – 对唯一索引的UPSERT

我搜索了一下我的问题,但找不到任何真正有用的东西。 所以我的问题/困境保持这样:我知道mysql数据库有一个唯一的索引系统,可以使用这种格式在同一查询中插入/更新: insert into t(a,b,c) values(1,1,1) on duplicate keys update b=values(b),c=values(c); 以及用于替换该索引的现有记录的替换格式。 说实话,我在MSSQL中看到的唯一类似的东西是merge但我真的不喜欢它,并且validation插入或更新的查询根本不是唯一的索引… 那么如何将mysql独特的UPSERT模拟到Entity Framework中呢? 这是我的主要问题…… 我的意思是没有从实体集中获取记录并检查它是否为null或者是否为可能的插入或更新; 我能得到它吗? 或不? 任何提示都很有用 我看到了这个,但没有出现在版本6中…… 实体的例子: [Table(“boats”)] public class Boat { [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int id { get; set; } [MaxLength(15)] [Index(“IX_ProviderBoat”,1,IsUnique=true)] public string provider_code { get; set; } public string name { get; set; } [Index(“IX_ProviderBoat”, 3, IsUnique = […]

在sql server compact edition上执行Insert OR Update(upsert)

我有c#项目正在使用sqlserver压缩版和entity framework进行数据访问。 我需要向db插入或更新大量5000+或更多的行,因此如果密钥存在则更新记录(如果不插入)。 我无法找到一种方法来实现这一点与紧凑版和EF具有可怕的性能,即在核心i7计算机上花费2分钟。 我已经尝试搜索记录,看它是否存在,然后插入,如果没有,或更新,如果它,搜索是杀手。 我已经尝试编译搜索查询,但只做了一点改进。 我尝试的另一件事是在try catch中插入记录并且如果更新失败,但这迫使我在每条记录上保存更改以获得exception,而不是在最后是性能杀手。 显然我不能使用存储过程,因为它是紧凑版。 另外我看过只是直接在db上执行t-sql,但是在compact中缺少进程语句似乎排除了这一点。 我在全世界范围内搜寻和思考。 我真的想使用压缩,如果我可以过度表达部署的好处和能力,以防止用户挖掘数据库。 任何建议将不胜感激。 谢谢

AddOrUpdate工作不符合预期,并产生重复

我正在使用基于Code-First DBContext的EF5设置。 在DbMigrationsConfiguration.Seed我试图用默认的虚拟数据填充DB。 要完成此任务,我使用DbSet.AddOrUpdate方法。 最简单的代码来说明我的目标: j = 0; var cities = new[] { “Berlin”, “Vienna”, “London”, “Bristol”, “Rome”, “Stockholm”, “Oslo”, “Helsinki”, “Amsterdam”, “Dublin” }; var cityObjects = new City[cities.Length]; foreach (string c in cities) { int id = r.NextDouble() > 0.5 ? 0 : 1; var city = new City { Id = j, Name […]

UPSERT进入具有动态表名的表

任何更好的UPSERT进入表的方法,提供: 数据以~1行/秒进行upsert 表名是DYNAMIC,使用传递给它的ObjectID参数生成 以下程序:“ORA-00942:表格或视图不存在” CREATE OR REPLACE PROCEDURE PROCEDURE “SPINSERTDATA” ( pObjectID IN RAW, pDateTime IN TIMESTAMP, pValue IN BINARY_DOUBLE, ) AS BEGIN Declare vQueryInsert VARCHAR2(1000); vQueryUpdate VARCHAR2(1000); vTableName VARCHAR2(30); Begin vTableName := FGETTABLENAME(POBJECTID => pObjectID); vQueryUpdate := ‘UPDATE ‘ || vTableName || ‘ SET “VALUE” = :1’; vQueryInsert := ‘INSERT INTO ‘ || vTableName […]