无法遍历集合

时间:2011-08-15 02:19:00

标签: web-services asp.net-mvc-3 entity-framework-4.1

那不是它......

问题在于我如何使用EF客户模型。

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>'

这部分是因为我的Web服务接口中有以下DataContract,它具有YeagerTechWcfservice命名空间。

[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类中的类来定义我的Customer对象。我认为这是我想要的正确行为。但是,当我尝试运行我的服务时,我无法调用Getcustomers方法,因为它旁边有一个红色的X.

我觉得我需要告诉我的Web服务使用我的YeagerTechModel Customer类作为接口中的DataContract,但不知道如何做到这一点。这是我在YeagerTechModel项目中创建的Customer类(这是一个单独的项目,但与YeagerTechWcfService项目在同一个解决方案中)。

如何解决这个问题,我的方法会在我的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; }
    }

2 个答案:

答案 0 :(得分:0)

尝试添加.ToList() IEnumerable的&LT;客户和GT; customer = DbContext.Customers.Where(p =&gt; p.City.StartsWith(“A”))。ToList();

答案 1 :(得分:0)

以下是我用来解决问题的设置:

YeagerTechModel项目: 1.添加System.ServiceModel&amp; System.Runtime.Serialization命名空间。 2.为Customer类添加DataContract属性,并为类中的每个属性添加DataMember属性,该属性也支持DataAnnotations。这是与EF生成的类不同的类。

YeagerTechWcfService项目: 1.该类将用作Web服务的接口;不是我最初在项目中声明的那个。我删除了那个。但是,这将在WCF测试客户端工具中生成rex X.这就是让我失望的原因。我仍然可以使用我正在描述的设置。只是我必须使用另一个客户端(YeagTech项目,引用此Web服务)来进行测试。 2.我现在可以在GetCustomers方法中使用以下代码片段来检索多个客户。 3.IQueryable customer = DbContext.Customers.Where(p =&gt; p.CustomerID&gt; 0);

4.在我的Customer控制器中,我现在可以使用以下代码片段从我的Web服务中的方法中检索数据: 5.Illumerable customerList = db.GetCustomers();

6.我的客户视图包含以下模型: 7. @ model IEnumerable

现在工作正常!!!

相关问题