2011-08-15 92 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")); 

上面的代碼給了我下面的設計時編譯錯誤。

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

這部分是因爲我有以下DataContract在我的界面,供有YeagerTechWcfservice命名空間中的web服務。

[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; } 
    } 

如果我註釋掉上面的接口類,設計時編譯錯誤消失認爲它現在使用類,其中有我的客戶對象定義我YeagerTechModel類。我認爲這是我想要的正確行爲。但是,當我嘗試運行我的服務時,我無法調用Getcustomers方法,因爲它旁邊有一個紅色的X.

我覺得我需要告訴我的Web服務使用我的YeagerTechModel Customer類作爲界面中的DataContract,但不知道該怎麼做。這是我在YeagerTechModel項目(這是一個單獨的項目,但與YeagerTechWcfService項目相同的解決方案)中創建的Customer類。

如何解決此問題,我的方法將在我的GetCustomers webservice方法中正確轉換正確的對象?

[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 客戶,則設計時編譯錯誤消失。我需要評估一些,然後發佈...... – sagesky36

+0

就像我之前說過的,我無法使用SCT測試客戶端在我的Web服務中調用此方法,因爲它上面有一個紅色的X.它說「WCF測試客戶端不支持此操作,因爲它使用YeagerTechModel.Customer類型[]」。 – sagesky36

+0

那麼,如何使用YeagerTechWcfService命名空間而不是YeagerTechModel命名空間?如果我使用YeagerTechWcfService命名空間,則會出現設計時編譯錯誤。如果我使用YeagerTechModel命名空間,則設計時編譯錯誤消失,但由於上述註釋無法調用該方法。 – sagesky36

0

這裏是我用來解決該問題的設置:

YeagerTechModel項目:1.新增 的System.ServiceModel & System.Runtime.Serialization命名空間。 2.爲Customer類添加DataContract屬性,併爲類中也支持DataAnnotations的每個屬性添加DataMember屬性。這是EF生成的類的一個單獨的類。

YeagerTechWcfService項目: 1.該類將用作Web服務的接口;而不是我最初在項目中宣佈的那個。我刪除了那一個。但是,這將在WCF測試客戶端工具中生成rex X.這就是拋棄我。我仍然可以使用我描述的設置。這只是我必須使用另一個客戶端(YeagTech項目,它引用此Web服務)來執行測試。 2.我現在可以在GetCustomers方法中使用以下代碼片段來檢索多個客戶。 3.IQueryable customer = DbContext.Customers.Where(p => p.CustomerID> 0);

4。在我的客戶控制器中,我現在可以使用下面的代碼片段從我的Web服務中的方法中檢索數據: 5.IEnumerable customerList = db.GetCustomers();

6.My客戶視圖包含以下模型: 7. @模型的IEnumerable

現在工作得很好!