从数据库中的字符串转换为布尔属性实体框架4.1

时间:2011-07-15 14:58:06

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

我正在开发一个遗留的oracle数据库,它在数据库中使用字符文字T和F作为其布尔值但是我希望Entity属性能反映一个正确的boolen值是否需要在模型转换时转换此值绑定它是一个只读数据库,因此插入不重要

2 个答案:

答案 0 :(得分:5)

这是不可能的。您必须将字符串属性映射到数据库表列,然后使用未映射的布尔属性:

public string MyStringProperty { get; set; }

[NotMapped]
public bool MyBoolProperty
{ 
    get { return MyStringProperty == "T"; }
    set { MyStringProperty = value ? "T" : "F"; }
}

答案 1 :(得分:2)

我建议包装或扩展生成类型以添加​​此类功能......

实体框架将生成基本上与数据库表中的数据相匹配的对象,因此,如果您有一个名为“Contacts”的表,您将获得一个名为“Contacts”的对象,我想(虽然我可能错了)这些类被定义为部分类,因此它生成类似......

的东西
public partial class Contact { 
  string BoolReally { 
    get; set;
  };
}

然后你添加一个像这样的新属性......

public partial class Contact { 
  bool MyBool get { 
    return (legacyValue == "T") ? true : false;
  }
}

现在,当您声明一个Contact实例时,只需从“MyBool”中获取值。

...

这种情况正在扩大,结束将是这样的......

public class MyContact {
     public Contact Contact;
     public bool MyBool { 
         get { 
             return Contact.BoolAsString; 
         }
     }
}
类似的事情......只需稍微不同地消耗对象:)