级联删除错误

时间:2014-08-20 07:35:57

标签: c# entity-framework ef-code-first

我已使用级联删除编写了MVC5 Internet应用程序,并收到以下错误:

Unable to cast object of type 'System.Collections.Generic.List`1[TestDeleteForeignKeyReferences.Models.Room]' to type 'TestDeleteForeignKeyReferences.Models.Room'.

这是我的上下文类:

public class MyDatabaseContext : DbContext
{
    public DbSet<House> houses { get; set; }
    public DbSet<Room> rooms { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<House>()
            .HasOptional(x => x.rooms)
            .WithOptionalDependent()
            .WillCascadeOnDelete(true);
    }
}

这是我的House课程:

public class House
{
    [Key]
    public int Id { get; set; }
    public string name { get; set; }
    public virtual ICollection<Room> rooms { get; set; }

    public House()
    {
        rooms = new List<Room>();
    }
}

这是我的Room课程:

public class Room
{
    [Key]
    public int Id { get; set; }
    public int roomNumber { get; set; }
    public virtual House house { get; set; }
}

尝试在以下创建代码中向数据库添加House时发生错误:

db.houses.Add(house);

如果我在上下文类中没有OnModelCreating方法,则不会发生错误。

我可以帮助您使用此代码。

1 个答案:

答案 0 :(得分:0)

您想要与可选主体建立一个(房屋)到多个(房间)关系(房间在房间是可选的)。配置应该是。

    modelBuilder.Entity<House>()
        .HasMany(x => x.rooms)
        .WithOptional(x => x.house)
        .WillCascadeOnDelete(true);