2016-09-12 49 views
0

我有代碼優先生成的數據庫。在它裏面我有一張桌子上的布爾專欄。此列需要更改爲枚舉。問題是表已經有數據,必須以某種方式轉換。 我有什麼 布爾賽:真/假 我需要什麼 枚舉MyEnum: A,B,C,d 我需要ISA的值轉換,使真正的映射到A和虛假映射到B. 哪有我這樣做?在實體框架中將bool更改爲枚舉 - 代碼優先

+0

它必須自動工作。只需將實體中的屬性類型從bool更改爲「MyEnum」。你試過這個嗎? –

+0

不,我沒有。它如何知道哪個值是真的,哪個值是假的?另外,我還需要該列有不同的名稱。 – Shaggydog

+0

您必須設置枚舉成員的值,如下所示:'MyEnum {A = 1,B = 0}' –

回答

2

你可以試試在類遷移做到這一點:

public partial class fromBool2Enum : DbMigration 
{ 
    public override void Up() 
    { 
     //add new column: 
     AddColumn("dbo.MyTable", "IsA_TEMP", c => c.Int()); 
     //transfer data to just created column 
     Sql("Update dbo.MyTable set IsA_TEMP = case when IsA then 0 else 1 end"); 
     //0(i.e. A) and 1(i.e. B) is just example, correct it on your own, depending on enum's declaration 

     //Drop old column 
     DropColumn("dbo.MyTable", "IsA") 
     //Rename new column to initial name 
     Sql("EXEC sp_rename 'dbo.MyTable.IsA_TEMP', 'IsA', 'COLUMN'");    
    } 

    public override void Down() 
    { 
     //corresponding reverse code... 
    }  
} 
相關問題