我有一個包含一些方法并連接到 sql server 中的兩個表的作業 Web 應用程式(一個端點)。這個應用程式完全是我自己在 ashx 檔案中從頭開始實作的,不遵循任何新舊架構,只是 ashx 檔案中的一些方法可以遠程呼叫并處理客戶端的需求。客戶端和服務器之間有共享的 DLL 用于資料處理。由于某些原因,我想將客戶端升級到 Dot Net 核心,因此需要升級通用 DLL,最后是端點。
現在我面臨的問題是 EF Core 只支持代碼優先,但有腳手架的方法。我從Microsoft 教程開始。然后我看到有一些方法可以遷移和腳手架現有的資料庫,但是我在使用命令“dotnet ef dbcontext scaffold”Data Source=...”的第一步中卡住了幾個小時。然后通常教程材料與其他技術結合asp.net core 非常快,我需要閱讀大量技術才能完成一項簡單的任務。
我擔心我走錯路了。只有兩個表,我可以手動實作表結構。沒有任何示例代碼可以修改它的表定義并且我可以很快重新啟動我的專案嗎?如果事情如此困難,我將在我的專案中省略 EF,并通過文本 sql 查詢重新定義整個端點邏輯。
uj5u.com熱心網友回復:
我可以手動實作表結構。
偉大的。只需創建一個 DbContext 子型別,該子型別為您的每個物體提供一個 DbSet。腳手架唯一能做的就是節省您的時間。
這是 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);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/313332.html
上一篇:將主鍵修改為外鍵時出錯
