如何在 EF Core 中配置、映射一对一关系

问题描述

作为一名学生,我必须使用 .Net Core 设计我的第一个 WebApi。我已经搜索了两天,还没有找到解决我问题的答案。可能是因为我是初学者。

我有以下课程:

public class Boat
{
    public int BoatId { get; set; }
    public int BoatNr { get; set; }
    public string BoatName { get; set; }

    public Location Location { get; set; }
}

public class Location
{
    public int LocationId { get; set; }
    public int Row { get; set; }
    public char Side { get; set; }
    public int Level { get; set; }

    public Boat Boat { get; set; }
}

我想配置我的数据库,这样我就可以获得所有船只的列表,以及它们的位置。但我也想要一份所有地点的清单,如果有船,是或否。

在我看来,这两个属性都应该是可选的。位置不一定有船,船也不一定有位置。

我试过了:

Entity Framework Core zero-or-one to zero-or-one relation

Implementing Zero Or One to Zero Or One relationship in EF Code first by Fluent API

...但没有结果

编辑: 我想要一个 DbSet 船,显示我所有的船及其位置。还有一个 DbSet Locations,显示所有位置和他们的船。

解决方法

试试这个:

public class Boat
{
    public int Id { get; set; }

    public int BoatNr { get; set; }
    public string BoatName { get; set; }

    public int? LocationId { get; set; }
    public virtual Location Location {get; set;}
}

public class Location
{
    public int Id{ get; set; }

    public int Row { get; set; }
    public char Side { get; set; }
    public int Level { get; set; }

    public virtual ICollection<Boat> Boats { get; set; }

    //you can use this instead of collection
    public virtual Boat Boat { get; set; }
    //but I don't recommend to do this
}

并且由于您使用的是 net core 5,因此您不需要任何流畅的 api