1

我们正在 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。

它在数据库名称后添加“(单用户)”,不知道这是否有帮助

4

0 回答 0