[英]Entity Framework Code First - Cascading Delete
实体框架代码优先。
我正在尝试在表上实现级联删除,但出现错误
“参数@objname模棱两可,或者声明的@objtype(COLUMN)错误。”
我有以下模型:
用户表:
public class User {
public int id { get; set; }
public List<UserSickness> Sickness { get; set; }
}
疾病表:
public class UserSickness {
public int id { get; set; }
public DateTime SicknessDate { get; set; }
public List<Symptom> Symptoms { get; set; }
}
症状表:
public class Symptom {
public int id { get; set; }
public string Description { get; set; }
}
所以,基本上,我希望用户度过一个“病假”的日子,并能够说出他/她的症状是什么...
同样,这就是我在实施时遇到的问题。 当我删除特定日期的“疾病”时,我希望通过级联删除来删除“症状”
我遵循以下SO问题:
并添加以下代码:
protected override void OnModelCreating(DbModelBuilder modelBuilder) {
// delete symptoms
modelBuilder.Entity<DatapultData.Model.UserSickness>()
.HasOptional(a => a.Symptoms)
.WithOptionalDependent()
.WillCascadeOnDelete(true);
base.OnModelCreating(modelBuilder);
}
当我添加迁移以实现此功能时,它将生成以下代码:
namespace Data.Migrations
{
using System;
using System.Data.Entity.Migrations;
public partial class addedcascadingdeleteonsymptoms : DbMigration
{
public override void Up()
{
DropForeignKey("dbo.Symptoms", "UserSickness_id", "dbo.UserSicknesses");
DropIndex("dbo.Symptoms", new[] { "UserSickness_id" });
RenameColumn(table: "dbo.UserSicknesses", name: "UserSickness_id", newName: "Symptoms_id");
CreateIndex("dbo.UserSicknesses", "Symptoms_id");
AddForeignKey("dbo.UserSicknesses", "Symptoms_id", "dbo.Symptoms", "id", cascadeDelete: true);
DropColumn("dbo.Symptoms", "UserSickness_id");
}
public override void Down()
{
AddColumn("dbo.Symptoms", "UserSickness_id", c => c.Int());
DropForeignKey("dbo.UserSicknesses", "Symptoms_id", "dbo.Symptoms");
DropIndex("dbo.UserSicknesses", new[] { "Symptoms_id" });
RenameColumn(table: "dbo.UserSicknesses", name: "Symptoms_id", newName: "UserSickness_id");
CreateIndex("dbo.Symptoms", "UserSickness_id");
AddForeignKey("dbo.Symptoms", "UserSickness_id", "dbo.UserSicknesses", "id");
}
}
}
但是,当我执行“更新数据库”时,出现以下错误,我不知道如何解决。
Either the parameter @objname is ambiguous or the claimed @objtype (COLUMN) is wrong.
谁能暗示我在做什么错?
谢谢
您的数据库还在吗? 如果删除数据库,则会发生这种情况。 如果未删除,请尝试删除迁移脚本,添加迁移(通过NuGet)并更新数据库。
我认为您的问题出在关系中...如何配置此表? 您可以将虚拟类添加到此类之间的关系,例如导航属性
public class UserSickness {
public int id { get; set; }
public DateTime SicknessDate { get; set; }
public List<Symptom> Symptoms { get; set; }
// Navigation property
public virtual User UserAsociated { get; set; }
}
public class Symptom {
public int id { get; set; }
public string Description { get; set; }
// Navigation property
public virtual UserSickness UserSicknessAsociated { get; set; }
}
然后,将配置更改为
protected override void OnModelCreating(DbModelBuilder modelBuilder) {
// delete symptoms
modelBuilder.Entity<DatapultData.Model.UserSickness>()
.HasOptional(a => a.Symptoms)
.WithRequired(b => b.UserSicknessAsociated)//Update this line
.WillCascadeOnDelete(true);
base.OnModelCreating(modelBuilder);
}
为了避免类似的错误,您应该对User类进行相同的设置。
也许这可以解决错误消息中显示的歧义列名称
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.