2013-04-08 248 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乌姆斯 - 但它是有用的,它的工作无所不能。