Mar*_*rek 9 asp.net entity-framework asp.net-core
我想在迁移时将数据插入表中。是否可以?迁移需要可用的无参数构造函数,我想使用 Startup.cs 文件中定义的 db 上下文(最好我想通过依赖注入获得它)。那怎么办?
在 EF Core 2.1 中,迁移可以自动计算插入、更新或删除的内容
将数据库升级到模型的新版本时,必须应用操作。
例如,我们有一个 User 和 UserComment 实体,如下所示:
public class User
{
public int UserId { get; set; }
public string Name { get; set; }
public List<UserComment> UserComments { get; set; }
}
public class UserComment
{
[Key]
public int CommentId { get; set; }
public string CommentTitle { get; set; }
[ForeignKey("User")]
public int FKUserId { get; set; }
public User User { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在 DBContext 中,将 OnModelCreating 函数和种子数据覆盖到每个实体:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<User>().HasData(new User[] {
new User{UserId=1,Name="iman"},
new User{UserId=2,Name="Alex"},
});
}
Run Code Online (Sandbox Code Playgroud)
要播种有关系的数据,必须指定外键值:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<UserComment>().HasData(new UserComment[] {
new UserComment{FKUserId=1,CommentId=1,CommentTitle="Comment1"},
});
}
Run Code Online (Sandbox Code Playgroud)
注意:您必须使用迁移来应用更改
迁移是将您的数据库“升级”到新“版本”的过程。在此期间,您现有的数据库表(“旧版本”)不需要匹配您的类(实体)(“新版本”),因此您不能安全地使用它们。
在迁移期间,您应该仅使用原始 SQL 命令对表和记录进行操作。您可以使用migrationBuilder.Sql("UPDATE ...");此类更新,将它们手动放入迁移Up()代码中。
如果您需要使用实体类执行数据修改 - 您应该使用“种子数据”解决方案(来自@itikhomi评论),但请记住它会在您的应用程序每次启动时运行,因此您应该在其中进行一些版本检查。
| 归档时间: |
|
| 查看次数: |
13904 次 |
| 最近记录: |