2011-06-14 72 views
5

我想从现有的SQL数据库模式创建EF 4.1代码优先模型,我想知道是否可以执行属性数据的某种类型转换。如何在EF 4.1中执行属性类型转换代码优先

例如,我有一个现有表“富”有这样一个领域:

isTrue char(1) 'valid values are "Y" or "N" 

在我的EF 4.1代码第一种模式,我想这个字段转换为一个boolean类型,如:

public class Foo 
{ 
    public bool isTrue { get; set; } 
} 

这是可能在EF 4.1 Code First中通过扩展DBContext或在模型中添加额外代码或EntityTypeConfiguration <>子类吗?如果是的话,有人可以指向我的链接或一些文件如何做到这一点?重构数据库字段在这个时候是不可能的。

回答

2

EF不可能进行转换。

一个解决办法可能是使EF忽略布尔属性,并使用该转换true"Y"false"N"的包装特性。


如果你通常需要这种灵活性,我建议你看看更成熟的框架。例如,通过指定YesNo作为映射类型,NHibernate就支持这种开箱即用的需求。

4

可以使用非公开的非映射字段,该字段使用内部字段,然后可以先用代码保存并检索,然后在此处执行映射。这将需要做的每一个需要转换,当然,或领域,以辅助方法,

internal string YesNo { get; set; } 

private bool _bYesNo; 
[NotMapped] 
public bool bYesNo 
{ 
    get{return (YesNo == "Y") ? true : false;} 
    set{_bYesNo = value;YesNo = (bYesNo) ? "Y" : "N";} 
} 
+8

我打算给你一个投票,然后我看到匈牙利符号。出去了。 :p – 2011-06-28 20:02:36

1

我有同样的问题,以下解决方案简单求制定了非常适合我!

Entity Framework and Oracle Boolean

在我的代码表字段只是看起来像一个正常的布尔,但在数据库中它是一个char(1):该EF模型将其转换成“Y”或“N”并保存它到数据库。 我也对Guid进行char(36)操作。

+1

链接已损坏。 – 2014-11-25 11:37:24