1

基本上,在我的EF數據庫中,我首先使用EF代碼向表中添加了DateTime行。應用遷移腳本時運行自定義代碼

這裏是它的現在是:

public class Employee 
    { 
     [Key] 
     public int Id { get; set; } 

     public DateTime Date { get; set; } //this has been added 
    } 

正如你所看到的日期不可爲空 - 因此我需要首先填寫的日期,當我運行遷移。

這裏是產生遷移腳本:

public partial class Changed_Employee : DbMigration 
    { 
     public override void Up() 
     { 
      AddColumn("dbo.Employees", "Date", c => c.DateTime(nullable: false)); 
     } 
    } 

的事情是,我想,以確定每個單獨的「僱員」的確切日期運行一些自定義的C#邏輯。

但是,我該怎麼做?

回答

1

做到這一點的最簡單的方法:

在所有的日期/時間設置爲00.00.0000

Sql("UPDATE Employees SET Date= -DATEDIFF(MINUTE, CurrentTime, 0)"; 

遷移當應用程序開始,你可以創建一個使用C#來更新自定義種子法數據:

優點: 很容易

缺點: 當您具有多重遷移級別時,將會失去一些遷移邏輯(日期時間轉換)。數據將在稍後由app開始轉換。

順便說一句,也許你也需要設置列爲日期爲可爲空並填充數據,然後在腳本的末尾改變表並改變列爲空,否則遷移將無法正常工作。

AddColumn("dbo.Employees", "Date", c => c.DateTime(nullable: true)); 
.. 
.. 
.. 
Sql("Update....") 
.. 
.. 
AlterColumn("dbo.Employees", "Date", c => c.DateTime(nullable: false)); 

對於你要在這裏閱讀我的文章的不同方法: Read database during an entity framework migration (select query)

+0

謝謝您的回答。 運行的邏輯是在C#中,所以我想我可以在它之間實現它。 順便說一句,你鏈接到鏈接到這個線程的「不同的方法」。你能解決這個問題嗎? –

+0

@ J.Doe我已經更新了答案。 –

+1

非常感謝您的回答:)工作很棒! –

相關問題