[英]When migrating from EF to EF Core do you need to create a new migration with the entire database structure?
[英]Do you need to configure Constraints, Indices, Default Values, etc. when working with an existing database in EF?
我通常用純SQL定義數據庫(大多數情況下是在VS數據庫項目中),如果需要在.NET項目中使用它們,則可以使用Entity Framework對它們進行反向工程 。
但是,如果您從現有數據庫中生成實體和上下文,則通常會得到一堆代碼,這些代碼僅配置了我不想由EF處理的東西,如索引。
實體框架正常運行是否真的需要所有這些代碼? 還是只是在某種情況下有人要使用EF的遷移或其他功能? 沒有問題,工作所需的最低配置是多少?
一些我認為不必要的代碼示例(全部用於EF Core):
約束和刪除行為
entity.HasOne(d => d.Order)
.WithMany(p => p.OrderPosition)
.HasForeignKey(d => d.OrderId)
.OnDelete(DeleteBehavior.ClientSetNull) // ?
.HasConstraintName("FK_ORDER_ORDERPOSITION"); // ?
默認值和列類型
entity.Property(e => e.CreatedOn)
.HasColumnType("datetime") // ?
.HasDefaultValueSql("(getdate())"); // ?
entity.Property(e => e.Price)
.HasColumnType("decimal(10, 2)"); // ?
指數
entity.HasIndex(e => new { e.ProjectId, e.OrderId }) // ?
.HasName("UNIQUE_PROJECT_ORDER") // ?
.IsUnique(); // ?
最長長度
entity.Property(e => e.Application)
.IsRequired()
.HasMaxLength(60); // ?
價值創造
entity.Property(e => e.Sequence)
.ValueGeneratedOnAdd(); // ?
entity.Property(e => e.GUID)
.ValueGeneratedNever(); // ?
其中大多數都已使用或有用。 EF可以在沒有所有這些的情況下工作,但是您會遇到問題或限制。
EF需要ColumnTypes和長度才能正確綁定參數。 EF需要知道密鑰生成策略,以獲取生成的密鑰值。 EF需要了解導航屬性和外鍵屬性之間的關系。
我認為EF對於關系的級聯行為沒有任何作用,但它可能會或將來可能會做。
EF不在乎索引,但是將來可能會意識到唯一索引。 EF核心需要了解外鍵關系中涉及的所有鍵。
當前 ,運行時(遷移之外)未使用以下內容,可以從腳手架的代碼中安全刪除這些內容:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.