我正在充实我的数据访问层并遇到了我的第一个问题。我首先使用实体框架代码以及一些存储库和 asp.net web api 来以 json 格式显示数据。
我正在尝试从 get 方法中提供的两个不同的 poco 获取数据。这些模型是:
public class Freelancer
{
public int ID { get; set; }
public string Email { get; set; }
public string Password { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string CompanyName { get; set; }
public string Avatar { get; set; }
public Address FreelancerAddress { get; set; }
public ICollection<Client> Clients { get; set; }
}
和地址:
public class Address
{
public int AddressId { get; set; }
public string Street { get; set; }
public string City { get; set; }
public string State { get; set; }
public string PostalCode { get; set; }
public string Phone { get; set; }
public string Email { get; set; }
}
最后是客户端对象列表:
public class Client
{
public int ID { get; set; }
public string Name { get; set; }
public Address ClientAddress { get; set; }
public string Logo { get; set; }
public ICollection<Project> Projects { get; set; }
public int FreelancerID { get; set; }
public Freelancer Freelancer { get; set; }
}
在我的 Api 控制器中,我正在尝试做这样的事情(针对这个问题进行了简化):
public IEnumerable<Freelancer> Get()
{
var user = Uow.Freelancers.GetFreelancer(1);
var result = from x in user
select new
{
ID = x.ID,
Name = x.LastName,
Address = x.FreelancerAddress.Street
};
return result;
}
我得到的错误是这样的:
无法将类型“System.Collections.Generic.IEnumerable”隐式转换为“System.Collections.Generic.IEnumerable”。存在显式转换(您是否缺少演员表?)
我可以只返回 Freelancer 对象就好了,但在 Json 中它会为地址和客户端显示 null,即使有相关数据。有没有办法使用 linq 获取我需要的对象,或者我应该对我的 DAL 进行某种重新设计。我正处于起步阶段,所以如果您有最佳实践建议,我正在寻找最佳实践建议。
附加信息
这就是 Uow.Freelancer.GetFreelancer(1) 提供的内容;
[{"iD":1,"email":"david.stanley.13@gmail.com","password":"password","firstName":"David","lastName":"Stanley","companyName":null,"avatar":null,"freelancerAddress":null,"clients":null}]
GetFreelancer() 看起来像这样:
public IEnumerable<Freelancer> GetFreelancer(int id)
{
IEnumerable<Freelancer> freelancer = (from x in DbSet
select x);
return freelancer;
}
我看不到任何使用 .Reference 或 .Include 的方法,但这可能是正确的方法。我记得在几个项目之前做过类似的事情......
有用!!*
这是需要发生的事情:
我将 GetFreelancer 方法更改为:
IEnumerable<Freelancer> freelancer = from x in DbSet
.Include("FreelancerAddress")
.Include("Clients")
where x.ID == id
select x;
return freelancer;
起初这不起作用,因为 Freelancer 引用了完全引用 Freelance 的 Client,所以它永远隧道。我删除了 Client 中的引用,所以它看起来像这样:
public class Client
{
public int ID { get; set; }
public string Name { get; set; }
public Address ClientAddress { get; set; }
public string Logo { get; set; }
public ICollection<Project> Projects { get; set; }
public int FreelancerID { get; set; }
}
我的输出正是我所需要的:一个自由职业者和他的地址,以及他的客户名单。