gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 03:46:34 28 4
gpt4 key购买 nike

我有一个简单的实体:

public class Hall
{
[Key]
public int Id {get; set;}

public string Name [get; set;}
}

然后在 Seed 方法中我使用 AddOrUpdate 来填充表:

var hall1 = new Hall { Name = "French" };
var hall2 = new Hall { Name = "German" };
var hall3 = new Hall { Name = "Japanese" };

context.Halls.AddOrUpdate(
h => h.Name,
hall1,
hall2,
hall3
);

然后我在包管理控制台中运行:

Add-Migration Current
Update-Database

一切正常:我在“Hall”表中有三行。但是,如果我再次在包管理控制台 Update-Database 中运行,我已经有五行了:

Id  Name
1 French
2 Japaneese
3 German
4 French
5 Japanese

为什么?我认为应该是三排,而不是五排。我尝试使用 Id 属性而不是 Name 但它没有什么区别。

更新:

此代码产生相同的结果:

var hall1 = new Hall { Id = 1, Name = "French" };
var hall2 = new Hall { Id = 2, Name = "German" };
var hall3 = new Hall { Id = 3, Name = "Japanese" };

context.Halls.AddOrUpdate(
h => h.Id,
hall1);

context.Halls.AddOrUpdate(
h => h.Id,
hall2);

context.Halls.AddOrUpdate(
h => h.Id,
hall3);

我还通过 nuget 安装了最新的 EntityFramework。

最佳答案

好吧,我用这个把脸从键盘上敲了一个小时。如果您的表的 Id 字段是一个身份字段,那么它将不起作用,因此请为 identifierExpression 使用不同的字段。我使用了 Name 属性,还从 new Hall {...} 初始化程序中删除了 Id 字段。

对 OP 代码的这种调整对我有用,所以我希望它对某人有所帮助:

protected override void Seed(HallContext context)
{
context.Halls.AddOrUpdate(
h => h.Name, // Use Name (or some other unique field) instead of Id
new Hall
{
Name = "Hall 1"
},
new Hall
{
Name = "Hall 2"
});

context.SaveChanges();
}

关于c# - Entity Framework Code First AddOrUpdate 方法插入重复值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10007351/

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