在我的控制器中,我尝试使用包含EF4来选择相关实体,但是lambda表达式会抛出以下错误,
我在实体类中定义了相关实体,如
public class CustomerSite
{
public int CustomerSiteId { get; set; }
public int CustomerId { get; set; }
public virtual Customer Customer { get; set; }
}
然后在我的控制器中我有
var sites = context.CustomerSites.Include(c => c.Customer);
public ViewResult List()
{
var sites = context.CustomerSites.Include(c => c.Customer);
return View(sites.ToList());
}
任何人都可以指出我正确的方向指出我在这里做错了吗?
答案 0 :(得分:84)
嗯,帖子很老了,但只是回复这里来更新它。好吧, Entity Framework 4.1 的Include()
方法有扩展方法,它也接受lambda表达式。所以
context.CustomerSites.Include(c => c.Customer);
完全有效,您需要做的就是使用它:
using System.Data.Entity;
答案 1 :(得分:11)
Include是System.Data.Entity命名空间中的扩展方法,您需要添加:
using System.Data.Entity;
然后你可以使用lambda表达式而不是字符串。
答案 2 :(得分:7)
Include
方法需要一个字符串,而不是lambda:
public ViewResult List()
{
var sites = context.CustomerSites.Include("Customer");
return View(sites.ToList());
}
当然你可以编写一个custom extension method,它可以使用lambda表达式,并使你的代码独立于某些魔术字符串,并且重构更友好。
但无论你做什么请不要将EF自动生成的对象传递给你的视图。 使用视图模型。
答案 3 :(得分:1)
Include
采用字符串,而不是lambda表达式
将其更改为CustomerSites.Include("Customer")
答案 4 :(得分:0)
如果您在Razor中收到此错误:
例如:
@Html.RadioButtonFor(model => model.Security, "Fixed", new { @id = "securityFixed"})
C#不知道如何将字符串转换为有效的bool或已知类型。
所以改变你的字符串如下:
@Html.RadioButtonFor(model => model.Security, "True", new { @id = "securityFixed"})
或
@Html.RadioButtonFor(model => model.Security, "False", new { @id = "securityFixed"})