C# 如何在删除人之前删除地址
当用户删除此人时,我正在尝试删除之前与此人关联的地址。正如您所看到的,我尝试获取此人id以在删除此人之前从地址中删除该地址 错误 无法创建“System.Object”类型的常量值。只有 在此上下文中支持基元类型或枚举类型 描述:在执行过程中发生未处理的异常 当前的web请求。请查看堆栈跟踪以了解更多信息 有关错误的信息及其在代码中的来源 异常详细信息:System.NotSupportedException:无法创建 “System.Object”类型的常量值。只有基元类型或 在此上下文中支持枚举类型 源错误: 在您的示例中,您的linq查询正在提取您已经拥有的数据,然后您根本不使用address变量C# 如何在删除人之前删除地址,c#,asp.net-mvc,entity-framework,C#,Asp.net Mvc,Entity Framework,当用户删除此人时,我正在尝试删除之前与此人关联的地址。正如您所看到的,我尝试获取此人id以在删除此人之前从地址中删除该地址 错误 无法创建“System.Object”类型的常量值。只有 在此上下文中支持基元类型或枚举类型 描述:在执行过程中发生未处理的异常 当前的web请求。请查看堆栈跟踪以了解更多信息 有关错误的信息及其在代码中的来源 异常详细信息:System.NotSupportedException:无法创建 “System.Object”类型的常量值。只有基元类型或 在此上下文中支持
您想从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");
}