[英]How can I perform additional DB initialization when using EF (5) Code First Migrations
[英]How can I alter a model to set the SQL default date when using EF code migrations
首先,在這個 StackOverflow 問題中有很多類似的答案幫助我非常接近,但在我的情況下沒有一個完全有效。
我有一個 model class:
public class TestModel
{
[Key]
public int TestModelId { get; set; }
public DateTime CreatedOn { get; set; }
}
並將其添加到DbContext
文件中,如下所示:
public virtual DbSet<TestModel> TestModels { get; set; }
因此,在add-migration
時,這會產生:
...
migrationBuilder.CreateTable(
name: "TestModels",
columns: table => new
{
TestModelId = table.Column<int>(nullable:false)
.Annotation("SqlServer:Identity", "1, 1"),
CreatedOn = table.Column<DateTime>(nullable:false)
},
...
現在我正在嘗試獲得一個一站式的地方,以確保CreatedOn
列構建器在其中具有默認的GETDATE()
:
CreatedOn = table.Column<DateTime>(nullable:false, defaultValueSql: "GETDATE()")
我知道在將其轉換為 SQL 服務器端時效果很好,但是我根據鏈接的問題嘗試了幾個數據注釋和構造函數版本,但無濟於事,例如屬性
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
什么都不做,我不想每次創建一個 / 它時都必須手動將defaultValueSql
部分添加到遷移文件中。
那么我在哪里可以在模型中做到這一點?
您可以在 DbContext class 中完成此操作:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Property(x => x.CreatedOn).HasDefaultValueSql("getdate()");
.....
});
編輯:也需要有modelBuilder的實體屬性:
modelBuilder.Entity<TestModel>().Property...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.