当尝试更新我的数据库时,我偶然发现以下消息:
Violation of PRIMARY KEY constraint 'PK_AvatarBase'. Cannot insert duplicate key in object 'dbo.AvatarBase'. The duplicate key value is (1).
The statement has been terminated.
我正在尝试更新我的数据库,但我的 DataBaseContext 在 onModelCreating 方法中有一些种子数据,当其他人第一次创建数据库时我需要这些数据。
我的DataBaseContext如下:
using Microsoft.EntityFrameworkCore;
using TurtleQuest.Models;
namespace TurtleQuest.Data
{
public class TurtleQuestConnection : DbContext
{
public DbSet<Player> Players { get; set; }
public DbSet<CardMA> cardMAs { get; set; }
public DbSet<CardTORF> cardTORF { get; set; }
public DbSet<Avatar> Avatars { get; set; }
public DbSet<Game> Games { get; set; }
public TurtleQuestConnection(DbContextOptions<TurtleQuestConnection> options) : base(options) { }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
base.OnConfiguring(optionsBuilder);
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<AvatarBase>().HasData(
new
{
Id = 1,
Name = "BaseImage",
ImagePath = "/Images/Frenky/Lines.png"
}
);
modelBuilder.Entity<AvatarColor>().HasData(
new
{
Id = 1,
Name = "Base",
ImagePath = "/Images/Frenky/Colors/base.png"
},
new
{
Id = 2,
Name = "Blue",
ImagePath = "/Images/Frenky/Colors/Blue.png"
},
new
{
Id = 3,
Name = "Purple",
ImagePath = "/Images/Frenky/Colors/Purple.png"
},
new
{
Id = 4,
Name = "Red",
ImagePath = "/Images/Frenky/Colors/Red.png"
},
new
{
Id = 5,
Name = "Yellow",
ImagePath = "/Images/Frenky/Colors/Yellow.png"
}
);
modelBuilder.Entity<AvatarHat>().HasData(
new
{
Id = 1,
Name = "Top Hat",
ImagePath = "/Images/Frenky/Accesories/Hat1.png"
},
new
{
Id = 2,
Name = "Cap",
ImagePath = "/Images/Frenky/Accesories/Hat2.png"
}
);
}
}
}
任何帮助将不胜感激,我尝试查看其他帖子,但找不到我正在寻找的答案。
播种仅在模型创建时运行,因此如果数据库已存在,则不应运行。其次,如何进行更新?为什么不使用身份作为 ID?所以它将由 EF 处理