我正在开发一个遗留的oracle数据库,它在数据库中使用字符文字T和F作为其布尔值但是我希望Entity属性能反映一个正确的boolen值是否需要在模型转换时转换此值绑定它是一个只读数据库,因此插入不重要
答案 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;
}
}
}
类似的事情......只需稍微不同地消耗对象:)