0

我使用實體框架PatientEntities組建一個WCF數據服務。不同的EF屬性數據類型比存儲層可能嗎?

我的解決方案必須滿足這些要求:

  • 實體的屬性出生日期患者是存儲在SQL Server的字符串。如果實體類不使用「字符串」類型而是使用DateTime類型,那將是理想的。 (我希望這是可能的,因爲我們正在從存儲層抽象出來)。在哪裏可以轉換機制,將轉換爲和從DateTime /字符串,以便該實體和SQL Server是同步?。我無法更改存儲層的結構,所以我必須解決它。
  • WCF數據服務(只讀,所以無需保存更改)都需要使用,因爲客戶將能夠使用LINQ表達式來消費服務。他們可以基於任何給定的查詢場景生成結果,而不受像GetPatient(int ID)這樣的單一方法的限制。

我試過使用DTO,但碰到了將ObjectContext映射到DTO的問題,我不認爲這在理論上是可能的......或者如果它太複雜。

我試圖使用自跟蹤實體,但他們需要從如果我正確的.edmx文件的元數據,這是不允許不同屬性的數據類型。

我也想爲我的Entity getter方法添加自定義項,以便類型「string」的屬性「MRN」在返回之前需要執行.Replace(「MR〜」,string.Empty)。我可以將它添加到getter方法中,但問題是Entity Framework將在下次刷新實體類時覆蓋它。我可以放置這些東西嗎?

我應該使用POCO呢?這將如何與WCF數據服務一起工作?該服務將在何處獲取元數據?

回答

0

這是絕對有可能的。您需要使用的是QueryView,它可以讓您控制給定列如何映射到實體上的屬性。比如這裏是你可以對病人實體做的事情。

<EntitySetMapping Name="Patients"> 
<QueryView> 
select value conceptualnamespace.Patient(p.PatientId, 
cast(p.DateOfBirth as Edm.DateTime), 
replace(p.Name,'MR~','') 
from entitycontainer.Patients as p 
</QueryView> 
</EntitySetMapping> 

我在這本書中更多地介紹了這個概念。該配方被稱爲。 1525。映射一個實體的一個或多個表

+0

哇感謝定製零件。這個解決方案比我嘗試的所有東西(DTO,自追蹤實體,POCO)都更加優雅和簡單!而且我正在考慮訂購這本書,看起來它可能會幫助我很多,因爲我在EF方面相對較新。 – 2010-07-11 04:35:15

相關問題