我是EF代码的新手。当我尝试将级联更改为“NoAction”时,实体框架只是创建另一个外键。
[Table("City")]
public partial class City
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
public virtual List<District> DistrictList { get; set; }
}
[Table("District")]
public partial class District
{
[Key]
public int Id { get; set; }
[Required]
public int CityId { get; set; }
[Required]
public string Name { get; set; }
[Required]
[ForeignKey("CityId")]
public virtual City City { get; set; }
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<City>().HasMany(v => v.DistrictList).WithOptional().WillCascadeOnDelete(false);
}
因此,District
表格同时包含CityId
和City_Id
。
抱歉我的英文不好,谢谢
答案 0 :(得分:1)
您正在同时使用fluentapi和数据注释。如果要在OnModelCreating方法中定义实体之间的关系,只需从City属性中删除[ForeignKey]注释。
答案 1 :(得分:1)
您应该使用ForeignKey-Attribute或ForeignKey-Property。
此外,我尝试使用WithOptional()
类型,如下所示:WithOptional(e=>e.City)
。如果你想准确定义ef将创建什么,你可以使用所有配置可能性:
modelBuilder.Entity<City>()
.HasMany(v => v.DistrictList)
.WithOptional(e=>e.City)
.HasForeignKey(e=>e.CityId)
.WillCascadeOnDelete(false);