我有两个模型,以一对一的关系配置:
public class PointOfInterestModel
{
[Key]
public int Id { get; set; }
[Required]
public string Name { get; set; }
public string Description { get; set; }
[Required]
public CoordinatesModel Coordinates { get; set; }
}
public class CoordinatesModel
{
[Key]
[ForeignKey("PointOfInterest")]
public int Id { get; set; }
[Required]
public float Longitude { get; set; }
[Required]
public float Latitude { get; set; }
public PointOfInterestModel PointOfInterest { get; set; }
}
因此,它们应该以一对一的关系存在。 PointOfInterestModel应该只有一个CoordinatesModel,而CoordinatesModel应该只有一个PointOfInterestModel。
现在,我想从我的数据库中查询我感兴趣的所有兴趣点,并获取所有坐标。
这是我认为应该起作用的,但不是:
pointsOfInterestList = db.PointOfInterestModels.Include(x=>x.Coordinates).ToList();
那么,出了什么问题?它是在关系中,还是在LINQ查询中?
我一直试图解决这个问题几个小时。
答案 0 :(得分:0)
检查数据库。
我怀疑您会在CoordinatesModelId
表中找到额外的PointOfInterestModel
字段。
EF无法猜测PointOfInterestModel.Cordinates
与CoordinatesModel.PointOfInterest
的引用相同,并创建新的。
尝试在PointOfInterestModel
中再添加一个属性:
[Required]
[InverseProperty("PointOfInterest")]
public CoordinatesModel Coordinates { get; set; }
答案 1 :(得分:0)
我从来没有在实体中看到这样写的关系,也许重写外键属性顺序可以解决你的问题。不要将属性添加到Id字段,而是尝试将其添加到虚拟对象。
public class CoordinatesModel
{
[Key]
public int Id { get; set; }
[Required]
public float Longitude { get; set; }
[Required]
public float Latitude { get; set; }
[ForeignKey("Id")]
public virtual PointOfInterestModel PointOfInterest { get; set; }
}