EF Core 迁移
Posted
技术标签:
【中文标题】EF Core 迁移【英文标题】:EF Core migration 【发布时间】:2021-11-23 11:41:59 【问题描述】:我有一个工作的 Web 应用程序(一个端点),其中包含一些方法并连接到 sql server 中的两个表。这个应用程序完全是我自己在一个ashx文件中从头开始实现的,不遵循任何新旧架构,只是ashx文件中的一些远程调用并处理客户端需求的方法。客户端和服务器之间有共享的 DLL 用于数据处理。 由于某些原因,我想将客户端升级到Dot Net core,因此需要升级通用DLL,最后是端点。
现在我面临的问题是 EF Core 只支持代码优先,但是有脚手架的方法。我从Microsoft tutorials 开始。然后我看到了迁移和搭建现有数据库的某些方法,但是我在使用命令的第一步中被卡住了几个小时 "dotnet ef dbcontext scaffold "Data Source=..." 。然后通常教程材料会与其他技术相结合,比如asp.net core 非常快,我需要阅读大量技术来完成一个简单的任务。
我担心我走错路了。只有两个表,我可以手动实现表结构。没有任何示例代码可以修改它的表定义并且我可以很快重新启动我的项目吗?如果事情这么难,我会从我的项目中省略 EF,并通过文本 sql 查询重新定义整个端点逻辑。
【问题讨论】:
【参考方案1】:我可以手动实现表结构。
太好了。只需为每个实体创建一个具有 DbSet 的 DbContext 子类型。脚手架的唯一作用就是节省您的时间。
这是一个完整的 SQL Server 示例:
public class Customer
public int Id get; set;
public string Name get; set;
public ICollection<Order> Orders get; = new HashSet<Order>();
public class Order
public int CustomerId get; set;
public int Id get; set;
public Customer Customer get; set;
public class Db : DbContext
string connectionString = "Server=localhost; database=efcore5test; integrated security = true;TrustServerCertificate=true;";
public DbSet<Customer> Customers get; set;
public DbSet<Order> Orders get; set;
public Db(string connectionString) : base()
this.connectionString = connectionString;
public Db() : base()
this.Database.SetCommandTimeout(180);
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
var constr = this.connectionString;
optionsBuilder.LogTo(Console.WriteLine);
optionsBuilder.UseSqlServer(constr, o => o.UseRelationalNulls().CommandTimeout(180).UseNetTopologySuite());
base.OnConfiguring(optionsBuilder);
protected override void OnModelCreating(ModelBuilder modelBuilder)
modelBuilder.Entity<Order>().HasKey(o => new o.CustomerId, o.Id );
base.OnModelCreating(modelBuilder);
【讨论】:
以上是关于EF Core 迁移的主要内容,如果未能解决你的问题,请参考以下文章
我可以将依赖项注入迁移(使用 EF-Core 代码优先迁移)吗?