那不是它......
问题在于我如何使用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; }
}
答案 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
现在工作正常!!!