C# 代码首先忽略虚拟属性
我有我的数据库,它包含实体之间的一些关系。例如房屋房间:C# 代码首先忽略虚拟属性,c#,entity-framework,code-first,C#,Entity Framework,Code First,我有我的数据库,它包含实体之间的一些关系。例如房屋房间: public class House{ [Key] public int Id{get;set;} public string Address{get;set;} public virtual IList<Room> Rooms{get;set;} } public class Room{ [Key] public int Id{get;set;} public str
public class House{
[Key]
public int Id{get;set;}
public string Address{get;set;}
public virtual IList<Room> Rooms{get;set;}
}
public class Room{
[Key]
public int Id{get;set;}
public string RoomName{get;set;}
[ForeignKey("House")]
public int HouseId{get;set;}
public virtual House House{get;set;}
}
如果我尝试序列化它,我有房间,房子不为空,里面有一个房间列表,一个房子,一个房间列表。。。等等
我希望房间仅选择非虚拟属性,因此,例如房屋ID,而不是房屋本身。。。我怎样才能做到这一点
编辑:
我忘了你说过我有时可能需要包括那些嵌套的实体。例如,有时我可能需要检查房间内的房屋内的财产。但有时并非如此。是否有一种方法可以选择每次?最简单的方法可能是创建用于序列化的DTO模型。这也隐藏了数据库结构。有关更多信息,请参见此:可能重复的我怀疑延迟加载在序列化时对您造成了影响,因此您应该使用ctx.Configuration.LazyLoadingEnabled=false禁用懒散加载;然后你会得到你想要的结果。我的问题是(可能)有时我可能需要这些属性,最好是将它们排除在外,并最终手动填充它们,或者是否有办法决定是否每次都包含它们?@Sami也许你的答案就是我正在寻找的解决方案。如果有一种“更简单”的方法,比如每次选择包含或不包含哪个属性,我会更喜欢,但其他方式您将是解决方案:)
Room room = ctx.Room.Where(x => x.Id == myId).FirstOrDefault();