【问题标题】:EF Core migrationEF Core 迁移
【发布时间】: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 查询重新定义整个端点逻辑。

【问题讨论】:

    标签: entity-framework .net-core entity-framework-migrations


    【解决方案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);
        }
    
      
    }
    

    【讨论】:

      猜你喜欢
      • 2022-11-11
      • 2021-03-21
      • 1970-01-01
      • 2021-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-15
      相关资源
      最近更新 更多