0

序列化genereted類我有以下表:從ADO.NET實體模型

create table Movie 
(
    id integer primary key identity(1,1), 
    title varchar(40), 
    synopsis varchar(200), 
    movieLength integer, 
    imageSmall varbinary(max), 
    imageLarge varbinary(max), 
    inputDate date, 
); 

使用ADO.NET實體模型,我生成的C#類。

//------------------------------------------------------------------------------ 
// <auto-generated> 
//  This code was generated from a template. 
// 
//  Manual changes to this file may cause unexpected behavior in your application. 
//  Manual changes to this file will be overwritten if the code is regenerated. 
// </auto-generated> 
//------------------------------------------------------------------------------ 

namespace CinemaService 
{ 
    using System; 
    using System.Collections.Generic; 

    public partial class Movie 
    { 
     public Movie() 
     { 
      this.Show = new HashSet<Show>(); 
     } 

     public int id { get; set; } 
     public string title { get; set; } 
     public string synopsis { get; set; } 
     public Nullable<int> movieLength { get; set; } 
     public byte[] imageSmall { get; set; } 
     public byte[] imageLarge { get; set; } 
     public Nullable<System.DateTime> inputDate { get; set; } 

     public virtual ICollection<Show> Show { get; set; } 
    } 
} 

我有以下合約:

namespace CinemaService 
{ 
    [ServiceContract] 
    public interface ICinemaService 
    { 
     [OperationContract] 
     Movie[] list_movies(); 
    } 
} 

和服務:

namespace CinemaService 
{ 
    [ServiceBehavior] 
    public class CinemaService : ICinemaService 
    { 
     private CinemaEntities _entities; 

     public CinemaService() 
     { 
      _entities = new CinemaEntities(); 
     } 

     public Movie[] list_movies() 
     { 
      return _entities.Movie.ToArray(); 
     } 

    } 
} 

服務可在IIS託管。

當表爲空時,我可以調用並獲得結果(空結果),但是當有一行時,我會得到一個異常。

我啓用了web.config中的跟蹤,我認爲問題是生成的類不是可序列化的。

使用跟蹤觀看者,我發現了以下內容:

異常類型:

System.ServiceModel.CommunicationException,System.ServiceModel, 版本= 4.0.0.0,文化=中性公鑰= b77a5c561934e089

消息:

嘗試序列化參數 http://tempuri.org/:list_moviesResult時發生錯誤。該消息的InnerException是 「類型 ‘System.Data.Entity.DynamicProxies.Movie_46EC56490AEEEA50CA29379C6E09B01C345ECBB1273756AE368BA72AA30754B5’ 數據合同名稱 ‘Movie_46EC56490AEEEA50CA29379C6E09B01C345ECBB1273756AE368BA72AA30754B5:預計不會http://schemas.datacontract.org/2004/07/System.Data.Entity.DynamicProxies’ 。考慮使用DataContractResolver或將任何未知的 類型靜態添加到已知類型的列表中 - 例如,使用KnownTypeAttribute屬性的 或將其添加到傳遞給DataContractSerializer的已知類型的 列表中。有關更多詳細信息,請參閱 InnerException。

讓我知道是否需要更多細節。

+0

在實體模型中禁用代理生成。 –

回答

0

這是我如何解決它:

我刪除生成的類,並下載一個新的代碼生成項模板:EF 6.x的EntityObject生成器。 (我使用DBContext生成器)。

現在它工作正常。

+1

這不是推薦的方法。儘管技術上這可能有效,但在通信層上公開持久對象通常會導致其他問題(性能,安全性)。請按照@Luis建議。 –

1

儘管您可以使用幾種方法來實現您想要的功能,如一個註釋(禁用代理生成)中所述。

如果你的架構允許它,我會推薦使用DTOs(數據傳輸對象)以及像automapper這樣的映射工具。