实体框架代码优先。
我正在尝试在表上实现级联删除但是收到错误
"参数@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; }
}
所以,基本上,我希望用户有一个&#34; Sick&#34;那天,能够说出他/她的症状......
同样,这就是我在实施方面遇到的问题。当我删除&#34;疾病&#34;对于特定日期,我想要一个级联删除来删除&#34;症状&#34;
我遵循了以下SO问题:
Entity Framework (EF) Code First Cascade Delete for One-to-Zero-or-One relationship
并添加了以下代码:
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");
}
}
}
但是,当我做一个&#34; update-database&#34;我收到以下错误,我不明白如何解决..
Either the parameter @objname is ambiguous or the claimed @objtype (COLUMN) is wrong.
任何人都可以建议我做错了吗?
由于
答案 0 :(得分:0)
你的数据库还在吗?如果删除数据库,则会发生这种情况。 如果未删除,请尝试删除迁移脚本,添加迁移(通过NuGet)并更新数据库。
答案 1 :(得分:0)
我认为你的问题存在于关系中...你如何配置这个表?您可以在这些类之间的关系中添加一个虚拟类,如导航属性
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类做同样的事情。
也许这可以解决ambiguos列名,显示在错误消息
中