Dot-Net
實體框架的 SQL 列預設值
我正在嘗試將 Code-First EF6 與預設 SQL 值一起使用。
例如,我有一個“CreatedDate”列/屬性不為空,SQL 中的預設值為“getdate()”
我如何在我的程式碼模型中表示這一點?目前我有:
<DatabaseGenerated(DatabaseGeneratedOption.Computed)> Public Property CreatedDate As DateTime這是否可行,或者即使實際列不應該為空,我是否需要使用可為空,因此 EF 在未設置時不會發送值:
<DatabaseGenerated(DatabaseGeneratedOption.Computed)> Public Property CreatedDate As DateTime?或者那裡有更好的解決方案?
我不希望 EF 處理我的預設值 - 我知道這對我來說是可用的,但在我目前的情況下是不可能的。
目前在 EF6 中沒有一個屬性來定義用於某個屬性預設值的數據庫函式。您可以對 Codeplex 進行投票以實現它:
<https://entityframework.codeplex.com/workitem/44>
實現類似功能的公認方法是在您指定預設數據庫函式的位置使用
Computed屬性。Migrations您的類在 C# 中可能如下所示:
public class MyEntity { [Key] public int Id { get; set; } public string Name { get; set; } [DatabaseGenerated(DatabaseGeneratedOption.Computed)] public DateTime Created { get; set; } }計算的屬性不必是可為空的。
然後您必須執行遷移並手動修改它以包含預設 SQL 函式。遷移可能如下所示:
public partial class Initial : DbMigration { public override void Up() { CreateTable( "dbo.MyEntities", c => new { Id = c.Int(nullable: false, identity: true), Name = c.String(), Created = c.DateTime(nullable: false, defaultValueSql: "GetDate()"), }) .PrimaryKey(t => t.Id); } public override void Down() { DropTable("dbo.MyEntities"); } }您會注意到 defaultValueSql 函式。這是讓計算工作的關鍵