C# 使用数据库迁移使用实体框架在特定表中插入固定记录

C# 使用数据库迁移使用实体框架在特定表中插入固定记录,c#,mysql,entity-framework,entity-framework-migrations,C#,Mysql,Entity Framework,Entity Framework Migrations,我的MySQL数据库中有表属性,我的要求是它应该有一些默认值的固定记录。我希望在实体框架的代码优先方法中,该表应该在迁移的帮助下自动填充。我第一次处理迁移问题,所以我同样需要帮助 我目前的迁移如下: public override void Up() { CreateTable( "dbo.properties", c => new {

我的MySQL数据库中有表属性,我的要求是它应该有一些默认值的固定记录。我希望在实体框架的代码优先方法中,该表应该在迁移的帮助下自动填充。我第一次处理迁移问题,所以我同样需要帮助

我目前的迁移如下:

public override void Up()
        {
            CreateTable(
                "dbo.properties",
                c => new
                    {
                        id = c.Int(nullable: false, identity: true),
                        property_name = c.Int(nullable: false),
                        value = c.String(nullable: false, maxLength: 255, storeType: "nvarchar"),
                        type = c.Int(nullable: false),
                    })
                .PrimaryKey(t => t.id)
                .Index(t => t.property_name, unique: true, name: "uk_property_name");

        }

        public override void Down()
        {
            DropIndex("dbo.properties", "uk_property_name");
            DropTable("dbo.properties");
        }
迁移具有填充数据的功能。由于此方法每次
更新数据库时都会运行,因此需要确保数据不会被多次插入。这就是
AddOrUpdate
命令的作用,尽管在更复杂的情况下,您可以只使用标准LINQ:

if (!context.MyTable.Any(t => t.Id == "seedId") { // insert };
但我只想在您的场景中使用AddOrUpdate:

protected override void Seed(MyContext context)
{
    context.Properties.AddOrUpdate(x => x.Value,
        new Property() { Value = "My Prop Name 1", Property_Name = 1, Type = 1 },
        new Property() { Value = "My Prop Name 2", Property_Name = 2, Type = 2 },
        new Property() { Value = "My Prop Name 3", Property_Name = 3, Type = 1 }
        );
}
注意,由于您的id字段是identity,所以我不包括它,而是使用Value来检查它是否已经存在。如果值可以复制,或者需要控制Id,则可能需要一种不同的技术,如