在實際的項目開發中,可能會遇到同一張表同時保存自身和上級(或下級)的信息(一般是通過設置一個上級主鍵【ParentId】的列與主鍵【Id】關係) 例如:城市庫,有國家、省、市...,省的ParentId是國家的Id,同理市的ParentId是省的Id public class City { /// ...
在實際的項目開發中,可能會遇到同一張表同時保存自身和上級(或下級)的信息(一般是通過設置一個上級主鍵【ParentId】的列與主鍵【Id】關係)
例如:城市庫,有國家、省、市...,省的ParentId是國家的Id,同理市的ParentId是省的Id
public class City
{
/// <summary>
/// Id
/// </summary>
public int Id { get; set; }
/// <summary>
/// 名稱
/// </summary>
public string Name { get; set; }
/// <summary>
/// 上級Id
/// </summary>
public int? ParentId { get; set; }
/// <summary>
/// 下級地區
/// </summary>
public virtual ICollection<City> ChildCitys { get; set; }
/// <summary>
/// 上級地區
/// </summary>
public virtual City Parent { get; set; }
}
View Code
public class CityMap : EntityTypeConfiguration<City>
{
public CityMap()
{
ToTable("City");
HasKey(c => c.Id);
Property(c => c.Id).HasDatabaseGeneratedOption(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Identity);
Property(c => c.Name).HasMaxLength(50);
//配置關係
HasMany(c => c.ChildCitys).WithOptional(c => c.Parent).HasForeignKey(k => k.ParentId);
}
}
View Code
static void Main(string[] args)
{
var country = new City { Name="中國" };
var province = new City { Name = "廣東省" };
var citys = new List<City>
{
new City { Name="廣州" },
new City { Name="深圳" },
new City { Name="珠海" }
};
province.ChildCitys = citys;
country.ChildCitys = new List<City> { province };
EFContext<City> context = new EFContext<City>();
context.Table.Add(country);
context.SaveChanges();
Console.WriteLine("ok");
Console.ReadKey();
}
View Code
運行控制台程式
然後查看資料庫:
示例使用的是Entity Framework 6.X,同時上面的關係是0..1←→N,因為國家沒有上級(ParentId為null)