2012-10-31 39 views
0

我具有以下查詢(EF5,.NET4.5):定義使用內部EF枚舉查詢

from p in repository 
select new Person() { 
    Name = p.Name, 
    Birthday = p.Birthday, 
    MyEnumValue = MyEnum.Value1 
}; 

其中MyEnumValue枚舉像:

public enum MyEnum : byte 
{ 
    Value1 = 1, 
    Value2 = 2 
} 

在運行時該代碼導致例外:

從物化的'System.Byte't指定的轉換ype到'MyApp.Domain.Models.MyEnum'類型無效。

但如果我改變枚舉定義

public enum MyEnum { ... } 

一切工作正常。

是否有可能修復異常請不要將MyEnum更改爲int? (並且沒有額外的字節財產:))

+0

數據庫中的相應列是什麼?它是CodeFirst嗎? – Pawel

+0

這是DB-First。 MyEnumValue沒有相應的列。我從數據庫中獲取'p'對象(類型無關緊要)並構建一個新的Person對象(Person和MyEnum類型不包含在模型中)。 – Andrey

+0

我不能重複這個。我做了'public enum TestEnum:byte {Test}; public class Test { public string Name {get;組; } public TestEnum EnumValue {get;組; { 使用} } 類節目 { 靜態無效的主要(字符串[]參數)(VAR CTX =新實體()){ 變種 C = ctx.Countries.Select(A =>新測試{ Name = a.CountryName,EnumValue = TestEnum.Test}); Console.Write(c!= null); } } }'。我錯過了什麼? – Pawel

回答

0

這是MySQL的.NET連接器錯誤。因此只有一個選項 - 解決方法並等待下一個版本。

-2

嘗試投這樣的:

from p in repository 
select new Person() { 
    Name = p.Name, 
    Birthday = p.Birthday, 
    MyEnumValue = (MyEnum) Enum.Parse(typeof(MyEnum), MyEnum.Value1, true) 
}; 

如果 「人」 的 「MyEnumValue」 字段爲字節投下爲字節...

+0

這不會編譯。即使使用「MyEnum.Value1.ToString(),真」它不會工作。 LINQ to Entities不支持Enum.Parse() – Andrey

+0

你爲什麼要這樣破解? .NET Framework 4.5上的EF5支持枚舉,並且不應該有必要進行黑客行爲。 – Pawel

+0

應該是;)但上面的代碼在enum僅爲int32時工作。 – Andrey