gpt4 book ai didi

c# - 具有两个在 EF 6 中工作的联接的 LINQ 查询在 EF 7 中给出错误

转载 作者:太空狗 更新时间:2023-10-29 21:53:20 26 4
gpt4 key购买 nike

我有一个在 EF 6(代码优先)项目中工作的 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>();
}
}

住宅类:

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

本来ID不是virtual但是不影响报错。数据库看起来与 EF 6 中的一样。关系是一对多的。我使用 EF 7.0.0-rc1-final。

有什么提示吗?

提前致谢

彼得

最佳答案

正如 EF 团队所说,EF Core RC1 不处理复杂的子类型(请在此处查看他们的路线图 https://github.com/aspnet/EntityFramework/wiki/Roadmap#in-progress 查询)

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

同时,您可以使用我在这里列举的解决方案之一:EF Core fluent mapping to inner object properties (映射的问题是一样的)

关于c# - 具有两个在 EF 6 中工作的联接的 LINQ 查询在 EF 7 中给出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35718051/

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