如何检查我尝试创建的种子数据是否已在我的数据库中?

问题描述 投票:0回答:1

当尝试更新我的数据库时,我偶然发现以下消息:

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"
            }
            );
        }


    }
}

任何帮助将不胜感激,我尝试查看其他帖子,但找不到我正在寻找的答案。

sql-server entity-framework model-view-controller dbcontext
1个回答
0
投票

播种仅在模型创建时运行,因此如果数据库已存在,则不应运行。其次,如何进行更新?为什么不使用身份作为 ID?所以它将由 EF 处理

© www.soinside.com 2019 - 2024. All rights reserved.