从db查询实体 - 一对一关系

时间:2016-12-06 14:47:51

标签: c# entity-framework linq asp.net-web-api one-to-one

我有两个模型,以一对一的关系配置:

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查询中?

我一直试图解决这个问题几个小时。

2 个答案:

答案 0 :(得分:0)

检查数据库。

我怀疑您会在CoordinatesModelId表中找到额外的PointOfInterestModel字段。

EF无法猜测PointOfInterestModel.CordinatesCoordinatesModel.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; }
}