簡體   English   中英

當我不想跟蹤實體以后時,如何通過WCF服務發送POCO實體?

[英]How can I send POCO Entities through WCF Service when I don't want to track the entity *later*?

我有一個ASP.NET MVC 4項目,其中Controller調用WCF服務層,調用業務層,該層使用EF 5.0實體的存儲庫。 然后將結果作為POCO實體返回給控制器。

當WCF服務被直接引用為庫時,它可以正常工作,但是我知道它不能被引用為服務,因為它們需要進行序列化,並且啟用ProxyCreation時,這是不可能的。

我不想創建DTO,因為我使用生成的POCO實體,這就是為什么它們存在於我的拙見中。 我只想在POCO實體到達服務層之前跟蹤更改。

很多人都在談論使用DTO,即使它們與POCO相同,如果這樣做,我可以創建具有不同名稱的自動生成的復制類,成為“代理禁用POCO作為DTO”,這有點奇怪。

我可以通過從服務層返回對象時將其序列化的方式來殺死POCO的代理類嗎?

我也不知道這個主意是否是一個好習慣。 但是,將“干凈的”實體發送​​到我的Controllers(將其准備好映射到ViewModels)就好了。 我也在尋找性能。

使用ProxyDataContractResolver解決了該問題。 我們也必須使用[Serializable] and [DataContract(IsReference=true)] 通過這種組合,可以啟用ProxyCreation。

我們處理此問題的方法是執行以下操作:

  1. 自定義T4生成POCO類,以便它生成以[Serializable()] and [DataContract(IsReference=true)]屬性[Serializable()] and [DataContract(IsReference=true)]
  2. 前端(視圖)和后端(wcf服務/業務層)都引用POCO生成的類,因為由於IsReference = true,您將不使用代理。

基本上就是這樣。

這樣,您不必創建DTO,而只需在后端和前端都使用POCO類。

但是請記住,使用IsReference = true句柄的WCF不喜歡冗余對象(因此,這對於某些具有導航屬性的POCO類是一個問題)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM