2011-08-15 10 views
0

それはそうではありません...コレクションを繰り返すことができません

問題は、私がEF Customerモデルをどのように使用しているかにあります。次のように

YeagerTechEntitiesの定義は()である:

namespace YeagerTechModel 
{ 
    public class YeagerTechEntities : ObjectContext 
    { 
     public YeagerTechEntities(); 
     public YeagerTechEntities(EntityConnection connection); 
     public YeagerTechEntities(string connectionString); 

     public ObjectSet<Customer> Customers { get; } 

     public void AddToCustomers(Customer customer); 
    } 
} 

DbContext.Customersの定義は以下の通りです:

public ObjectSet<Customer> Customers { get; } 

次のように私のサービス内の私のメソッドが定義されています。

public IEnumerable<Customer> GetCustomers() 
     { 
      YeagerTechEntities DbContext = new YeagerTechEntities(); 

      IEnumerable<Customer> customer = DbContext.Customers.Where(p => p.City.StartsWith("A")); 

上記の行は、次のデザイン時にコンパイルエラーが発生します。私はYeagerTechWcfserviceの名前空間を持っているWebサービスのための私のインターフェイスで、次のDataContractを持っているので

Cannot implicity convert type 'System.Linq.IQueryable<YeagerTechModel.Customer> to System.Collections.Generic.IEnumerable<YeagerTechWcfservice.Customer>' 

これは部分的です。

[DataContract] 
    public class Customer 
    { 
     [DataMember] 
     public Int16 CustomerID { get; set; } 

     [DataMember] 
     public String Email { get; set; } 

     [DataMember] 
     public String Company { get; set; } 

     [DataMember] 
     public String FirstName { get; set; } 

     [DataMember] 
     public String LastName { get; set; } 

     [DataMember] 
     public String Address1 { get; set; } 

     [DataMember] 
     public String Address2 { get; set; } 

     [DataMember] 
     public String City { get; set; } 

     [DataMember] 
     public String State { get; set; } 

     [DataMember] 
     public String Zip { get; set; } 

     [DataMember] 
     public String HomePhone { get; set; } 

     [DataMember] 
     public String CellPhone { get; set; } 

     [DataMember] 
     public String Website { get; set; } 

     [DataMember] 
     public String IMAddress { get; set; } 

     [DataMember] 
     public DateTime CreatedDate { get; set; } 

     [DataMember] 
     public DateTime? UpdatedDate { get; set; } 
    } 

私は上記のインタフェースクラスをコメントアウトした場合は、設計時にコンパイルエラーが離れて、​​それが今の私のCustomerオブジェクトが定義されている私のYeagerTechModelクラスでクラスを使っていることを考えて行きます。私はこれが私が欲しい正しいものだと思う。しかし、サービスを実行しようとすると、Getcustomersメソッドの横に赤いXが表示されるため、Getcustomersメソッドを呼び出すことができません。

YeagerTechModel CustomerクラスをインターフェイスのDataContractとして使用するようにWebサービスに指示する必要があると思いますが、その方法はわかりません。 YeagerTechModelプロジェクト(これは別のプロジェクトですが、YeagerTechWcfServiceプロジェクトと同じソリューション)で作成したCustomerクラスです。

私のメソッドがGetCustomers Webサービスメソッドで正しいオブジェクトを正しくキャストする場合、どうすれば解決できますか?

[MetadataType(typeof(CustomerMetaData))] 
    public partial class Customer 
    { 
    } 

    public class CustomerMetaData 
    { 
     public object CustomerID { get; set; } 

     [Required] 
     [StringLength(50)] 
     [DataType(DataType.EmailAddress)] 
     public object Email { get; set; } 

     [StringLength(50)] 
     [DataType(DataType.Text)] 
     public object Company { get; set; } 

     [StringLength(50)] 
     [DataType(DataType.Text)] 
     public object FirstName { get; set; } 

     [StringLength(50)] 
     [DataType(DataType.Text)] 
     public object LastName { get; set; } 

     [StringLength(50)] 
     [DataType(DataType.Text)] 
     public object Address1 { get; set; } 

     [StringLength(50)] 
     [DataType(DataType.Text)] 
     public object Address2 { get; set; } 

     [StringLength(50)] 
     [DataType(DataType.Text)] 
     public object City { get; set; } 

     [StringLength(2)] 
     [DataType(DataType.Text)] 
     public object State { get; set; } 

     [StringLength(10)] 
     [DataType(DataType.Text)] 
     public object Zip { get; set; } 

     [StringLength(12)] 
     [DataType(DataType.PhoneNumber)] 
     public object HomePhone { get; set; } 

     [StringLength(12)] 
     [DataType(DataType.PhoneNumber)] 
     public object CellPhone { get; set; } 

     [StringLength(100)] 
     [DataType(DataType.Url)] 
     public object Website { get; set; } 

     [StringLength(50)] 
     [DataType(DataType.EmailAddress)] 
     public object IMAddress { get; set; } 

     [Required] 
     [DataType(DataType.Date)] 
     public object CreatedDate { get; set; } 

     [DataType(DataType.Date)] 
     public object UpdatedDate { get; set; } 
    } 

答えて

0

IEnumerableを<カスタマー>顧客= DbContext.Customers.Whereた(p = > p.City.StartsWith( "A"))に.ToList()を追加してみてくださいToListメソッド()。ここで

+0

それはそうではありません....上記の問題は、名前空間に関する上記の私の全投稿にあります。次のステートメントは同じエラーを受け取ります。 IEnumerable customer = DbContext.Customers.Where(p => p.CustomerID> 0).ToList();左辺をIEnumerable customerに変更すると、デザイン時のコンパイルエラーがなくなります。私はさらにいくつかを評価し、投稿する必要があります... – sagesky36

+0

前にも述べたように、SCTテストクライアントでこのメソッドを呼び出すことはできません。 「この操作は、YeagerTechModel.Customer []」タイプを使用しているため、WCFテストクライアントではサポートされていません。 – sagesky36

+0

したがって、YeagerTechModel名前空間の代わりにYeagerTechWcfService名前空間を使用するにはどうすればよいですか? YeagerTechWcfService名前空間を使用すると、デザイン時にコンパイルエラーが発生します。 YeagerTechModel名前空間を使用すると、デザイン時のコンパイルエラーはなくなりますが、上記のコメントのためにメソッドを呼び出すことはできません。 – sagesky36

0

は、私は問題を解決するために使用される設定は次のとおりです。

YeagerTechModelプロジェクト: 1.Add System.ServiceModel & System.Runtime.Serialization名前空間。 2.Add CustomerクラスのDataContract属性を追加し、DataAnnotationsもサポートするクラスの各プロパティのDataMember属性を追加します。これは、EF生成クラスとは別のクラスです。

YeagerTechWcfServiceプロジェクト: 1.このクラスはWebサービスのインターフェイスとして使用されます。私が最初にプロジェクトで宣言したものではありません。私はそれを削除した。ただし、これはWCFテストクライアントツールでrex Xを生成します。それが私を捨てていたのです。私はまだ私が記述している設定を使用することができます。テストを行うには、別のクライアント(このWebサービスを参照するYeagTechプロジェクト)を使用する必要があるだけです。 2. GetCustomersメソッドで次のコードスニペットを使用して、複数の顧客を取得できるようになりました。 3.IQueryable customer = DbContext.Customers.Where(p => p.CustomerID> 0);

4。私のカスタマーコントローラーでは、次のコードスニペットを使用して、Webサービスのメソッドからデータを取得できます。 5.IEnumerable customerList = db.GetCustomers();

6.Myカスタマー・ビューには、次のモデルが含まれています

IEnumerableをモデル@ 7.それは今、正常に動作します!

関連する問題