我们正在ASP MVC4中创建一个项目,并且正在使用代码优先。这意味着我们的数据库在运行后会自动从我们的代码中创建。但我注意到数据库中的可选关系默认情况下没有启用删除级联。
所以在谷歌搜索之后,我发现你必须在你的上下文中添加它,但这给了我错误。
在我将WillCascadeOnDelete设置为true并删除我的数据库以便实体框架可以再次创建它之后,它创建了没有表格的数据库。但是如果我把它放在false上,它就没有任何问题。
以下是我用来表示真实的代码:
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无法访问。
它在数据库名称后添加“(单个用户)”,不知道这是否有帮助