如何连接1到多个表

时间:2018-01-19 11:06:57

标签: c# entity-framework

我有一个ASP.NET Core项目,它有两个表:City和Country。

public class City 
{
    [Key]
    public int Id { get; set; }
    public string CityName{ get; set; }
    public string Region{ get; set; }
    public int CountryID { get; set; }
    public Country Country { get; set; }
}

public class Country
{   
    [Key]
    public int Id { get; set; }
    [Required]
    public string CountryName{ get; set; }

    [Required]
    public string Continent{ get; set; }

    [Required]
    public string Capital{ get; set; }
    [Required]
    public int NumberOfPeople{ get; set; }
}

城市类继承国家/地区外键,1个国家/地区可以拥有多个城市,即1-(0..M)。它们都来自同一个DbContext 我希望能够点击"国家"的索引页面上的详细信息页面(显示所有国家/地区,其属性和选项) 这样它就会显示国家信息和该国家/地区的所有城市,但我无法弄清楚如何通过DbContext连接两个表格。

如何将带有特定ID和内部所有城市的国家/地区信息的模型传递到详细信息视图

3 个答案:

答案 0 :(得分:1)

如果您想在City中添加所有Country,则需要添加CountryCity的导航属性(已经是public class Country { ... public ICollection<City> Cities { get; set; } } 的其他部分配置关系):

var country = await context.Countries
    .Include(x => x.Cities)
    .SingleAsync(x => x.ID == someId);

这允许您执行单个数据库查询以获得所有结果,而无需进行手动连接 然后您可以将其用作:

Async

您可以使用查询执行程序的非line = line.Remove(0)版本,但鉴于您使用的是ASP.NET Core应用程序,我建议不要使用它。

答案 1 :(得分:0)

一种方法是使用字段的属性:

public class City
{
    [Key]
    public int Id { get; set; }
    public string CityName{ get; set; }
    public string Region{ get; set; }
    public int CountryID { get; set; }

    [ForeignKey("CountryID")]
    public virtual Country Country { get; set; }
}

public class Country
{   
    [Key]
    public int Id { get; set; }

    [Required]
    public string CountryName{ get; set; }

    [Required]
    public string Continent{ get; set; }

    [Required]
    public string Capital{ get; set; }

    [Required]
    public int NumberOfPeople{ get; set; }

    [InverseProperty("Country")]
    public virtual ICollection<City> Cities { get; set; }
}

答案 2 :(得分:0)

有多种方法可以做到。

首先,您应该声明您的类,例如:

)

其次,您应该配置关系:

public class City 
{
    [Key]
    public int Id { get; set; }

    public string CityName{ get; set; }

    public string Region{ get; set; }

    public int CountryId { get; set; }

    public Country Country { get; set; }
}

public class Country
{   
    [Key]
    public int Id { get; set; }

    [Required]
    public string CountryName{ get; set; }

    [Required]
    public string Continent{ get; set; }

    [Required]
    public string Capital{ get; set; }

    [Required]
    public int NumberOfPeople{ get; set; }

    public virtual ICollection<City> Cities { get; set; }
}