gpt4 book ai didi

c# - Entity Framework 4 和 Web Api 的匿名类型转换问题

转载 作者:太空宇宙 更新时间:2023-11-03 11:15:55 26 4
gpt4 key购买 nike

我正在充实我的数据访问层并遇到了我的第一个问题。我首先使用实体​​框架代码以及一些存储库和 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 Controller 中,我正在尝试做这样的事情(针对这个问题进行了简化):

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

我得到的错误是这样的:

Cannot implicitly convert type 'System.Collections.Generic.IEnumerable' to 'System.Collections.Generic.IEnumerable'. An explicit conversion exists (are you missing a cast?)

我可以只返回 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 引用的是 Client,而 Client 完全引用了 Freelance,所以它永远隧道化。我删除了客户端中的引用,所以它看起来像这样:

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

我的输出正是我所需要的:一个自由职业者和他的地址,以及他的客户名单。

最佳答案

我没有尝试过这段代码,根据提供的代码和我通过 Google 找到的内容,这只是我的头脑,但它有望为您指明正确的方向。

我认为应该在 GetFreeLancer 方法中进行更改(就获取相关表而言)。我还注意到您没有在查询中使用提供的 id,这意味着您使用的方法是为您提供表中的所有条目,因此我在我的示例中添加了一个 where 子句。

我在这里试图传达的基本思想是,当您获得所需的 Freelancer 记录时,您加载地址和客户集合。我假设 DbSet 是您的上下文,并且我在猜测实体名称。

public IEnumerable<Freelancer> GetFreelancer(int id)
{

IEnumerable<Freelancer> freelancer = from x in DbSet.Freelancers
.Include("Address")
.Include("Client")
where x.Id == id
select x;

return freelancer;
}

一旦返回了正确的数据,您应该能够在 Controller 方法中获得所需的任何内容。

就像我说的,我还没有尝试过这段代码,但至少希望它能让你继续下去。

我还建议获取 LINQPad,因为它是测试和使用 LINQ 查询的绝佳工具。

关于c# - Entity Framework 4 和 Web Api 的匿名类型转换问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12658363/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com