C# 使用数据库迁移使用实体框架在特定表中插入固定记录
我的MySQL数据库中有表属性,我的要求是它应该有一些默认值的固定记录。我希望在实体框架的代码优先方法中,该表应该在迁移的帮助下自动填充。我第一次处理迁移问题,所以我同样需要帮助 我目前的迁移如下: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 {
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,则可能需要一种不同的技术,如