我们正在 ASP MVC4 中制作一个项目,并且使用代码优先。这意味着我们的数据库是在运行后从我们的代码中自动创建的。但我注意到数据库中的可选关系默认情况下没有打开删除时的级联。
所以在谷歌搜索之后,我发现你必须在你的上下文中添加它,但这给了我错误。
在我将 WillCascadeOnDelete 设置为 true 并删除我的数据库以便实体框架可以再次创建它之后,它会创建没有表的数据库。但如果我将其设置为 false,它可以正常工作。
这是我用来将其设置为 true 的代码:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Location>()
.HasOptional(r => r.PartOfLocations)
.WithMany()
.WillCascadeOnDelete();
base.OnModelCreating(modelBuilder);
}
这是我的位置模型:
public class Location
{
[Key, DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int LocationId { get; set; }
[Display(Name = "Name"), Required]
public String Name { get; set; }
[Display(Name = "Description", ResourceType = typeof(ViewRes.ClassModelStrings))]
public String Description { get; set; }
public int LocationTypeId { get; set; }
[ForeignKey("LocationTypeId")]
public virtual LocationType LocationType { get; set; }
public virtual ICollection<Location> PartOfLocations { get; set; }
public override string ToString()
{
return this.Name;
}
}
此外,如果我在创建数据库后快速删除数据库,则会出现错误:无法访问数据库 XXX。
它在数据库名称后添加“(单用户)”,不知道这是否有帮助