【问题标题】:storing enum to database in entity [duplicate]将枚举存储到实体中的数据库[重复]
【发布时间】:2013-04-08 19:47:15
【问题描述】:

我正在尝试将下拉选择的值传递给数据库 我的数据合同有以下代码

      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());

它构建良好,但在运行时出现异常

【问题讨论】:

  • 如果您使用的是 EF5,则无需执行任何特殊操作来映射枚举:EF 会自动处理它。如果您没有使用 EF5,也许您应该使用。
  • @ChrisPratt 通过 c#-4.0 标签,我假设他使用的是 EF 4。他也可能无法切换。
  • 是的,我们正在使用 4.0 并且这里涉及的项目不止一个

标签: asp.net asp.net-mvc entity-framework c#-4.0


【解决方案1】:

Entity Framework 4 不支持使用枚举作为列类型。如果您想获得对枚举的原生支持,则需要升级到 Entity Framework 5。

如果您绝对必须使用 EF 4(因为已经在其中实施了一个项目),那么我建议您这样做:

public int RegardingObjectTypeAsInt { get; set; }

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

这不是一个很好的解决方案,但它是解决该问题的可靠解决方法,您仍然可以在您的页面上绑定到它,并将其视为您其他代码中的枚举本身。

【讨论】:

  • 我应该将此代码放在我的 dal 中还是数据合同中?
  • 这应该在实际的数据库对象本身中。
  • 我们使用的是数据优先模型,所以我不能对实际的数据库对象进行更改。我试图在 dal 中调整它。有没有办法在 dal 中做到这一点
  • @IronMan84 +1,但请注意 - 如果您使用的是 VS2010(框架 4),升级到 EF5 将无济于事
  • @lazyberezovsky 非常正确。我什至在对问题的评论中提到了这一点。
【解决方案2】:

成功了

eventToBeChanged.RegardingObjectType = (int)newevent.RegardingObjectType;

而不是

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

【讨论】:

    【解决方案3】:

    如果要将字符串值映射到数据库,请查看此答案:

    How to map an enum property in Entity Framework 4

    正如@IronMan84 指出的那样,我不确定这是否适用于多字枚举 - 但它很有用,而且几乎没有问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-11
      • 2023-03-07
      • 1970-01-01
      • 2014-08-07
      • 2019-10-02
      相关资源
      最近更新 更多