簡體   English   中英

實體框架如何處理數據庫表中的默認約束?

[英]How does Entity Framework handle Default constraints in the database table?

我正在編寫無法完成的代碼,因為這是一個漫長而繁瑣的過程。 我的任務是向現有數據庫添加新表,更新模型的.edmx並編寫一種方法,以通過c#后端代碼向表中添加新行。

在我的情況下,我的表上有2個默認約束

SomeTable
------------
ID INT IDENTITY (1,1) PRIMARY KEY CLUSTERED,
SomeDate DATETIME2 NOT NULL DEFAULT GETDATE(),
SomeOtherField VARCHAR(1024) NOT NULL DEFAULT ''

使用此表的.edmx模型,我將SomeDate的StoreGeneratedPattern設置為Computed 我還手動在SSDL對其進行了雙重檢查,以確保computed StoreGeneratedPattern屬性位於SomeTable實體的SomeDate字段中。

據我所知,不確定何時有以下代碼

public void AddSomeRow(...)
{
    SomeDbContext context = new SomeDbContext;
    var table = new SomeTable { SomeOtherField = "Value" };
    context.SomeTables.Add(table);
    context.SaveChanges();
}

我相信SomeDate字段將設置為默認約束(因為尚未在實體中填充該字段)。 這是真的嗎?

SomeOtherField上面列出的相同步驟, 我是否仍可以手動為它提供一個值(該值而不是默認約束出現在該字段中)或忽略它(默認約束將設置在該字段中)?

這個問題很難解釋,如果不合理,我深表歉意

StoreGeneratedPattern表示該值始終由數據庫生成,因此不允許您對其進行修改。 即,僅對數據庫計算列有意義。

至少在EF 6.1之前,還沒有直接的方法來支持數據庫默認值。 您唯一可以做的就是將默認值移出數據庫,並在模型(或代碼優先)端生成它們。 您會發現一些可行的方法,但是在某些情況下(特別是對於N層應用程序)它們並不安全。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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