それはそうではありません...コレクションを繰り返すことができません
問題は、私が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; }
}
それはそうではありません....上記の問題は、名前空間に関する上記の私の全投稿にあります。次のステートメントは同じエラーを受け取ります。 IEnumerable customer = DbContext.Customers.Where(p => p.CustomerID> 0).ToList();左辺をIEnumerable customerに変更すると、デザイン時のコンパイルエラーがなくなります。私はさらにいくつかを評価し、投稿する必要があります... –
sagesky36
前にも述べたように、SCTテストクライアントでこのメソッドを呼び出すことはできません。 「この操作は、YeagerTechModel.Customer []」タイプを使用しているため、WCFテストクライアントではサポートされていません。 – sagesky36
したがって、YeagerTechModel名前空間の代わりにYeagerTechWcfService名前空間を使用するにはどうすればよいですか? YeagerTechWcfService名前空間を使用すると、デザイン時にコンパイルエラーが発生します。 YeagerTechModel名前空間を使用すると、デザイン時のコンパイルエラーはなくなりますが、上記のコメントのためにメソッドを呼び出すことはできません。 – sagesky36