簡體   English   中英

使用EF中的現有數據庫時,是否需要配置約束,索引,默認值等?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM