2013-04-08 106 views
0

我試圖選擇的值傳遞一個下拉到數據庫 我datacontracts具有下面的代碼存儲枚舉數據庫實體

 public EnumTypes.RegardingObjectType RegardingObjectType { get; set; } 
    public Guid RegardingObjectId { get; set; } 

enumtypes.cs具有以下

public class EnumTypes 
{ 

    public enum RegardingObjectType 
    { 
     UnknownOrNone = 0, 
     Account = 1, 
     Cellsite = 2, 

eventdal.cs有以下幾種

 private t_Event MapEventToEntity(Event newevent, t_Event eventToBeChanged) 
    { 
    eventToBeChanged.RegardingObjectType = int.Parse(newevent.RegardingObjectType.ToString()); 

它建立良好,但得到例外wh運行

+1

如果您使用的是EF5,則不必做任何特別的操作來映射枚舉:EF會自動處理它。如果你不使用EF5,也許你應該。 – 2013-04-08 19:54:59

+0

@ChrisPratt通過c#-4.0標籤,我假設他會使用EF 4.他也可能無法切換。 – IronMan84 2013-04-08 20:06:01

+0

是的,我們正在使用4.0,並有多個項目,這裏涉及到 – user2167089 2013-04-08 20:13:10

回答

0

這個工作的

eventToBeChanged.RegardingObjectType = int.Parse(newevent.RegardingObjectType.ToString()); 
1

實體框架4不支持將枚舉用作列類型。如果你想擁有對枚舉的本地支持,你需要升級到實體框架5.

如果你絕對必須使用EF 4(因爲已經實現了一個項目),那麼我建議你去周圍像這樣:

public int RegardingObjectTypeAsInt { get; set; } 

[NotMapped] 
public EnumTypes.RegardingObjectType RegardingObjectType 
{ 
    get { return (EnumTypes.RegardingObjectType) this.RegardingObjectTypeAsInt; } 
    set { this.RegardingObjectTypeAsInt = (int)value; } 
} 

這不是一個漂亮的解決方案,但它是一個堅實的解決方法的問題,你仍然可以綁定到它在您的網頁,並把它當作枚舉本身在其他碼。

+0

我應該把這段代碼放在我的dal或datacontracts中嗎? – user2167089 2013-04-08 21:06:21

+0

這應該在實際的數據庫對象本身。 – IronMan84 2013-04-08 21:12:00

+0

我們正在使用數據優先模型,所以我不允許對實際的數據庫對象進行更改。 Insted我試圖調整它在達爾。有沒有辦法做到這一點在達爾 – user2167089 2013-04-08 21:41:20

0

如果你要映射的字符串值到數據庫,看看這個答案

eventToBeChanged.RegardingObjectType = (int)newevent.RegardingObjectType; 

代替:

How to map an enum property in Entity Framework 4

正如@但IronMan84指出,我不確定這是否適用於多詞en烏姆斯 - 但它是有用的,它的工作無所不能。