gpt4 book ai didi

entity-framework - 如何在 Seed 中通过 AddOrUpdate 方法插入身份

转载 作者:行者123 更新时间:2023-12-04 08:36:02 25 4
gpt4 key购买 nike

我有一个具有标识列的实体。作为数据种子的一部分,我想在我的系统中为“标准数据”使用特定的标识符值。
我不想禁用身份。
只有我想在迁移种子中设置 IDENTITY_INSERT ON。

我的代码是:

protected override void Seed(DelphyWCFTestService.Model.DataContext context)
{
context.Database.ExecuteSqlCommand("SET IDENTITY_INSERT [dbo].[Cities] On ");
context.Cities.AddOrUpdate(
p => p.CityId,
new City { CityId = 1, Title = "Paris" }
);
}

但我的 CityId 没有插入和身份自动插入

我的 Entity Framework 版本是 6.1.3

更新:

我将我的代码更改为:
context.Database.ExecuteSqlCommand("SET IDENTITY_INSERT [dbo].[Cities] On ");
var cities = new List<City>
{
new City { CityId = 1, Title = "Paris" }
};
context.Cities.AddRange(cities);
context.SaveChanges();
context.Database.ExecuteSqlCommand("SET IDENTITY_INSERT [dbo].[Cities] Off ");

并且问题没有解决。

最佳答案

AddOrUpdate 不像标准 LINQ ( see here).

我只会使用标准的 LINQ:

if (!context.Cities.Any())
{
using (var transaction = context.Database.BeginTransaction())
{ var cities = new List<City>
{
new City { CityId = 1, Title = "Paris" },
new City { CityId = 2, Title = "London" },
...
new City { CityId = 99, Title = "Rome" }
}
context.Database.ExecuteSqlCommand("SET IDENTITY_INSERT [dbo].[Cities] On ");
context.Cities.AddRange(cities);
context.SaveChanges();
context.Database.ExecuteSqlCommand("SET IDENTITY_INSERT [dbo].[Cities] Off ");

transaction.Commit();
}
}

如果您要添加到现有城市,则可以一一测试:
if (!context.Cities.Any(c => c.CityId == 1))
{
context.Cities.Add(new City { CityId = 1, Title = "Paris" });
}
... repeat for all cities
context.Database.ExecuteSqlCommand("SET IDENTITY_INSERT [dbo].[Cities] On ");
context.SaveChanges();
context.Database.ExecuteSqlCommand("SET IDENTITY_INSERT [dbo].[Cities] Off ");

关于entity-framework - 如何在 Seed 中通过 AddOrUpdate 方法插入身份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37811915/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com