[英]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。
我們處理此問題的方法是執行以下操作:
[Serializable()] and [DataContract(IsReference=true)]
屬性[Serializable()] and [DataContract(IsReference=true)]
。 基本上就是這樣。
這樣,您不必創建DTO,而只需在后端和前端都使用POCO類。
但是請記住,使用IsReference = true句柄的WCF不喜歡冗余對象(因此,這對於某些具有導航屬性的POCO類是一個問題)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.