Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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# 在EF 6中使用两个联接的LINQ查询在EF 7中出现错误_C#_Entity Framework_Linq_Join - Fatal编程技术网

C# 在EF 6中使用两个联接的LINQ查询在EF 7中出现错误

C# 在EF 6中使用两个联接的LINQ查询在EF 7中出现错误,c#,entity-framework,linq,join,C#,Entity Framework,Linq,Join,我有一个在EF6(代码优先)项目中工作的LINQ查询。现在我已将代码迁移到EF 7,此查询现在引发异常:ArgumentException:未为类型“X.Models.Domain.MadeChoice”定义属性“Int32 ID” 查询: var madeChoices = from res in X.Instance.Residence join room in X.Instance.Room on res.ID equals room.Residence

我有一个在EF6(代码优先)项目中工作的LINQ查询。现在我已将代码迁移到EF 7,此查询现在引发异常:ArgumentException:未为类型“X.Models.Domain.MadeChoice”定义属性“Int32 ID”

查询:

var madeChoices = from res in X.Instance.Residence
                  join room in X.Instance.Room on res.ID equals room.Residence.ID
                  join madeChoice in X.Instance.MadeChoice on room.ID equals madeChoice.Room.ID
                  where res.ID == residence.ID
                  select room.MadeChoices;
MadeChoice班级:

public class MadeChoice
{
    public virtual int ID { get; set; }

    [Required]
    public virtual ChoiceGroup Choicegroup { get; set; }

    [Required]
    public virtual Room Room { get; set; }

    [Required]
    public virtual Item Item { get; set; }
}
房间类别:

public class Room
{
    public virtual int ID { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }

    public virtual Residence Residence { get; set; }
    public virtual RoomType RoomType { get; set; }
    public virtual List<MadeChoice> MadeChoices { get; set; }

    // Constructors:
    public Room()
    {
        this.MadeChoices = new List<MadeChoice>();
    }
}
公共教室
{
公共虚拟整数ID{get;set;}
公共字符串名称{get;set;}
公共字符串说明{get;set;}
公共虚拟住宅{get;set;}
公共虚拟RoomType RoomType{get;set;}
公共虚拟列表MadeChoices{get;set;}
//建造商:
公共房间()
{
this.MadeChoices=新列表();
}
}
居住级别:

public class Residence
{
    public int ID { get; set; }
    public string ApartmentNumber { get; set; }

    public static IQueryable<List<MadeChoice>> GetMadeChoices(Residence residence)
    {
        var madeChoices = from res in X.Instance.Residence
                            join room in X.Instance.Room on res.ID equals room.Residence.ID
                            join madeChoice in X.Instance.MadeChoice on room.ID equals madeChoice.Room.ID
                            where res.ID == residence.ID
                            select room.MadeChoices;
        System.Diagnostics.Debug.Write("MadeChoices.Count: ");
        System.Diagnostics.Debug.WriteLine(madeChoices.Count());
        foreach (var madechoice in madeChoices)
        {
            System.Diagnostics.Debug.Write("MadeChoice.Count: ");
            System.Diagnostics.Debug.WriteLine(madechoice.Count());
        }
        return madeChoices;
    }

    // Navigational properties:
    public virtual List<Room> Rooms { get; set; }
    public virtual ResidenceType ResidenceType { get; set; }
    public virtual List<Tenant> Tenants { get; set; }
    public virtual List<PeriodResidenceDeadline> PeriodResidenceDeadline { get; set; }

    // Constructors:
    public Residence()
    {
        this.Rooms = new List<Room>();
        this.Tenants = new List<Tenant>();
        this.PeriodResidenceDeadline = new List<PeriodResidenceDeadline>();
    }
}
公共级住宅
{
公共int ID{get;set;}
公共字符串ApartmentNumber{get;set;}
公共静态IQueryable GetMadeChoices(住宅)
{
var madeChoices=来自X.Instance.Residence中的res
在res.ID上的X.Instance.room中加入room等于room.Residence.ID
在room.ID上的X.Instance.madeChoice中加入madeChoice等于madeChoice.room.ID
其中res.ID==residence.ID
选择room.MadeChoices;
System.Diagnostics.Debug.Write(“MadeChoices.Count:”);
System.Diagnostics.Debug.WriteLine(madeChoices.Count());
foreach(madeChoices中的var madeChoices)
{
System.Diagnostics.Debug.Write(“MadeChoice.Count:”);
System.Diagnostics.Debug.WriteLine(madechoice.Count());
}
回程回程;
}
//导航属性:
公共虚拟列表室{get;set;}
公共虚拟居住区类型居住区类型{get;set;}
公共虚拟列表租户{get;set;}
公共虚拟列表PeriodResidenceADLINE{get;set;}
//建造商:
公共住宅()
{
this.Rooms=新列表();
this.Tenants=新列表();
this.periodResidenceAdline=新列表();
}
}
最初,ID不是虚拟的,但不会影响错误。数据库看起来如EF 6所示。这种关系是一对多的。 我使用EF 7.0.0-rc1-final

有什么提示吗

提前感谢,


Peter

正如EF团队所说,EF Core RC1不处理复杂的子类型(请参见此处的路线图查询)

对于查询,这将在EF Core 1.0 RTM版本中处理


同时,您可以使用我在此列举的解决方案之一:(映射的问题与此相同)

也许在ID属性上添加[Key]会有所帮助?@cdie不,它没有帮助:(您可以发布映射吗?@cdie我已经添加了Residence和Room类。所有类都在DbContext中声明为公共虚拟DbSet xxxx{get;set;}。其他LINQ查询在其他实体对象上工作。我想,因为您首先使用代码,所以会有映射(EntityTypeConfiguration类)?或者只使用数据注释?记录的注释,因为它可能有助于其他读者:select语句选择列表而不是单个对象时,似乎会发生此错误。