2011-06-14 91 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