2011-06-06 65 views
4

我有一個枚舉映射到DB上char(1)字段中的可能字段值。如何在LINQ-to-SQL中將Enum映射到char(1)?

public enum TestEnum: char 
{ 
    Value1 = 'a', 
    Value2 = 'b', 
    ... 
} 

LINQ-to-SQL嘗試將char字段映射爲值,就像它們是枚舉的名稱一樣。例如,對於「a」的值,LINQ-to-SQL嘗試查找值TestEnum.a而不是TestEnum.Value1並導致異常。它僅支持整數字段的基於值的枚舉映射。

可以創建一個處理轉換的新屬性,但由於生成的表達式不直接映射到基礎字段,所以在查詢中表現不佳。

是否有另一種方法使LINQ-to-SQL使用enum值與char(1)進行映射?

回答

2

這是我們現在正在做的事情:

我們分配過程中使用System.Char爲基礎類型和類型轉換。例如:

entity.SomeField = (char)TestEnum.Value1; 

而且我們在查詢中使用Equals,如:

where entity.SomeField.Equals(TestEnum.Value1); 

.Equals使得轉換。如果你在這裏進行類型轉換,而不是SQL服務器添加一個不必要的NVarChar(1) - >Char(1)轉換。由於某種原因,.Equals語法不會執行此操作並且行爲正確。