更新时间:2023-12-05 12:11:28
您可以在3个步骤中执行此操作
/ p>
public class Event
{
public int Id {get;组; }
public string标题{get;组; }
public string City {get;组;
}
添加位置迁移并更新数据库
PM>启用迁移
PM>添加迁移AddLocationTable
PM>更新数据库
创建用于插入数据的空迁移
PM>添加迁移InsertLocationData
该类应该有空的 Up
和 Down
方法。
在 Up
方法中添加以下代码。
(var context = new AppContext())
{
var events = context.Set< Event>()。ToArray();
foreach(事件中的var ev)
{
ev.Location = new Location {City = ev.City};
}
context.SaveChanges();
}
再次运行迁移以应用 InsertLocationData
迁移。
PM>更新数据库
删除 City
属性,并运行迁移以应用更改。
PM>添加迁移DropCityFromEvent
PM>更新数据库
I'm using Entity Framework Code First approach in my project. I have a problem with database migration.
Now I have the entity
public class Event
{
public int Id { get; set; }
public string Title { get; set; }
public string City { get; set; }
}
I have already have data in my existing DataBase. Now I want to extend City property, like this
public class Event
{
public int Id { get; set; }
public string Title { get; set; }
public virtual Location Location { get; set; }
}
so, City become to Location with many properties.
public partial class Location
{
public int Id { get; set; }
public string Country { get; set; }
public string City{ get; set; }
public string Address { get; set; }
public string Place { get; set; }
}
So, I need for each row in Events Table create row in Locations Table and copy city. And set foreign key for event localtion to location row.But I don't know how to move existing data using Entity Framework Migration. I have read many post on Entity Framework Migration, but didn't find this case.
What is the best way to do this?
You could do that in 3 steps
Starting from
public class Event
{
public int Id { get; set; }
public string Title { get; set; }
public string City { get; set; }
}
Add Location migration and update the database
PM> Enable-Migrations
PM> Add-Migration AddLocationTable
PM> Update-Database
Create empty migration for inserting the data
PM> Add-Migration InsertLocationData
The class should have empty Up
and Down
method.
Add following code in the Up
method.
using (var context = new AppContext())
{
var events = context.Set<Event>().ToArray();
foreach (var ev in events)
{
ev.Location = new Location { City = ev.City };
}
context.SaveChanges();
}
Run the migration again to apply InsertLocationData
migration.
PM> Update-Database
Delete City
property and run a migration to apply the changes.
PM> Add-Migration DropCityFromEvent
PM> Update-Database