2013-04-04 80 views
3

我的模型有一个属性,它是一个枚举:如何枚举属性在实体框架图4

Sql server column "user_status" is a int NOT NULL. 

[Column("User_Status")] 
public UserStatus UserStatus { get; set; } 

public enum UserStatus 
{ 
    Pending = 1, 
    Member = 2, 
    Banned = 3 
} 

目前,我得到一个错误,当我保存的实体,因为它说,该列user_status不能为空。

我怎样才能得到实体框架,这个属性转换为int时,它保存/更新,加载时的实体也将其转换为枚举。

回答

12

实体框架4不支持使用枚举列类型。如果你想拥有对枚举的本地支持,你需要升级到实体框架5.

如果你绝对必须使用EF 4(因为已经实现了一个项目),那么我建议你去周围像这样:

[Column("User_Status")] 
public int UserStatusAsInt { get; set; } 

[NotMapped] 
public UserStatus UserStatus 
{ 
    get { return (UserStatus) this.UserStatusAsInt; } 
    set { this.UserStatusAsInt = (int)value; } 
} 

这不是一个漂亮的解决方案,但它是一个坚实的解决方法的问题,你仍然可以绑定到它在您的网页,并把它当作枚举本身在其他码。

+3

只记得在你的查询中使用*映射列*:var users = from User where UserStatusAsInt ==(int)UserStatus.Pending' – 2013-04-04 19:11:27

2

有时可能需要映射string值而不是enum的值int。你可以这样说:

public enum DwellingType { Apartment, Cottage, House } 

public DwellingType DwellingType { get; set; } // This wont be mapped in EF4 as it's an enum 

public virtual string DwellingTypeString  // This will be mapped 
{ 
    get { return DwellingType.ToString(); } 
    set 
    { 
     DwellingType stringValue; 
     if(Enum.TryParse(value, out stringValue)) 
     { DwellingType = stringValue; } 
    } 
} 

这其实不是我的工作,我碰到试图映射enums与EF4。不幸的是,我不记得我在哪里发现它,但仍然可能对其他人有用。

+0

你确定这对于多字枚举值是可靠的吗?以及? – IronMan84 2013-04-05 18:16:45

+0

我还没有尝试过,所以我不能告诉你 - 有趣的。 – MattSull 2013-04-06 11:12:03