C# 如何在删除人之前删除地址

C# 如何在删除人之前删除地址,c#,asp.net-mvc,entity-framework,C#,Asp.net Mvc,Entity Framework,当用户删除此人时,我正在尝试删除之前与此人关联的地址。正如您所看到的,我尝试获取此人id以在删除此人之前从地址中删除该地址 错误 无法创建“System.Object”类型的常量值。只有 在此上下文中支持基元类型或枚举类型 描述:在执行过程中发生未处理的异常 当前的web请求。请查看堆栈跟踪以了解更多信息 有关错误的信息及其在代码中的来源 异常详细信息:System.NotSupportedException:无法创建 “System.Object”类型的常量值。只有基元类型或 在此上下文中支持

当用户删除此人时,我正在尝试删除之前与此人关联的地址。正如您所看到的,我尝试获取此人id以在删除此人之前从地址中删除该地址 错误

无法创建“System.Object”类型的常量值。只有 在此上下文中支持基元类型或枚举类型

描述:在执行过程中发生未处理的异常 当前的web请求。请查看堆栈跟踪以了解更多信息 有关错误的信息及其在代码中的来源

异常详细信息:System.NotSupportedException:无法创建 “System.Object”类型的常量值。只有基元类型或 在此上下文中支持枚举类型

源错误:

在您的示例中,您的linq查询正在提取您已经拥有的数据,然后您根本不使用address变量


您想从db.Addresses中删除地址,而不是从person中删除地址。这还假设每个人只有一个地址。

我只是快速查看了一下,但我认为您的问题在于代码的以下部分:

var  address = (from u in db.Addresses
                       where u.PersonID.Equals(id)
                       select u.PersonID).SingleOrDefault();
试着替换

where u.PersonID.Equals(id)

希望这对你有用


(出于兴趣,如果您查看LeakyCode的以下Stackoverflow响应,他已经澄清了==和Equals之间的区别:)

您提到要删除属于某个人的所有地址,您需要获得这些地址的列表并将其删除

[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public ActionResult DeleteConfirmed(int id)
{
    Person person = db.Persons.Find(id);

    var  addresses = from u in db.Addresses
                   where u.PersonID == id;
    addresses.ToList().ForEach(a => db.Addresses.Remove(a));

    db.Persons.Remove(person);

    db.SaveChanges();
    return RedirectToAction("Index");
}
where u.PersonID.Equals(id)
where u.PersonID == id
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public ActionResult DeleteConfirmed(int id)
{
    Person person = db.Persons.Find(id);

    var  addresses = from u in db.Addresses
                   where u.PersonID == id;
    addresses.ToList().ForEach(a => db.Addresses.Remove(a));

    db.Persons.Remove(person);

    db.SaveChanges();
    return RedirectToAction("Index");
}