0
我有代碼優先生成的數據庫。在它裏面我有一張桌子上的布爾專欄。此列需要更改爲枚舉。問題是表已經有數據,必須以某種方式轉換。 我有什麼 布爾賽:真/假 我需要什麼 枚舉MyEnum: A,B,C,d 我需要ISA的值轉換,使真正的映射到A和虛假映射到B. 哪有我這樣做?在實體框架中將bool更改爲枚舉 - 代碼優先
我有代碼優先生成的數據庫。在它裏面我有一張桌子上的布爾專欄。此列需要更改爲枚舉。問題是表已經有數據,必須以某種方式轉換。 我有什麼 布爾賽:真/假 我需要什麼 枚舉MyEnum: A,B,C,d 我需要ISA的值轉換,使真正的映射到A和虛假映射到B. 哪有我這樣做?在實體框架中將bool更改爲枚舉 - 代碼優先
你可以試試在類遷移做到這一點:
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...
}
}
它必須自動工作。只需將實體中的屬性類型從bool更改爲「MyEnum」。你試過這個嗎? –
不,我沒有。它如何知道哪個值是真的,哪個值是假的?另外,我還需要該列有不同的名稱。 – Shaggydog
您必須設置枚舉成員的值,如下所示:'MyEnum {A = 1,B = 0}' –