Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 具有linq的实体框架多表_C#_Entity Framework_Linq_Code First - Fatal编程技术网

C# 具有linq的实体框架多表

C# 具有linq的实体框架多表,c#,entity-framework,linq,code-first,C#,Entity Framework,Linq,Code First,对于代码优先模型: public class User { [Key] public long Id { get; set; } public virtual List<Address> Addresses { get; set; } public string UserName { get; set; } } public class Address { [Key] public long Id { get; set; }

对于代码优先模型:

public class User
{
    [Key]
    public long Id { get; set; }
    public virtual List<Address> Addresses { get; set; }
    public string UserName { get; set; }
} 

public class Address
{
    [Key]
    public long Id { get; set; }
    public string Reference { get; set; }
    public string Street { get; set; }
}

它不返回地址表,只返回用户名。

默认情况下,EF启用延迟加载,因此您需要通过调用Include使用即时加载,此方法还可以获取相关实体,在您的示例中,IncludeAddresses方法获取相关地址

即时加载是一个过程,在此过程中,对一种类型实体的查询也会作为查询的一部分加载相关实体。通过使用Include方法实现即时加载


这里find

OP正在使用投影查询,因此,不需要立即加载或任何加载。@IvanStoev如果延迟加载,则在u=>u.addresses上出现错误:无法将lambda表达式转换为“string”类型,因为它不是委托类型。@Alex这无关紧要。@Sara Khan使用System.Data.Entity添加。您确定数据库表包含相关地址吗?您是否检查了生成的表-地址表中必须有User\U Id列。是的,User\U Id在那里。问题通过使用IncludeAddressEst解决。使用Include无法修复已发布的查询。如果它是固定的,那么查询就不同了,这篇文章是误导性的。@IvanStoev你可以在这里提出解决方案。我也会试试。这不是谁来提供解决方案的问题。我假设,一旦你问你有问题,我想说的是,如果数据是正确的,EF模型是正确的,那么问题不可能是你描述它的方式。如果您返回的是用户对象列表,那么Include会有所帮助,而对于像您这样的查询,它会被忽略,因此无法修复。
public IEnumerable GetLicensee()
{
    using (var db = new DataModelContext())
    {
        IEnumerable query = (from b in db.User
                             select new { UserName= b.UserName,Address=b.Addresses }).ToList();

        return query;
    }
}
public IEnumerable GetLicensee()
{
        using (var db = new DataModelContext())
        {
        IEnumerable query = (from b in db.User.Include("Addresses")
                     select new { UserName= b.UserName,Address=b.Addresses }).ToList();

            return query;
        }
 }