Iam尝试删除与用户删除之前关联的地址之前我遇到问题,因为我看到我尝试让人员ID从地址中删除之前删除人员 错误
无法创建“System.Object”类型的常量值。只要 在此上下文中支持原始类型或枚举类型。
描述:执行期间发生了未处理的异常 当前的网络请求。请查看堆栈跟踪了解更多信息 有关错误的信息以及它在代码中的起源。
异常详细信息:System.NotSupportedException:无法创建 'System.Object'类型的常量值。只有原始类型或 在此上下文中支持枚举类型。
来源错误:
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public ActionResult DeleteConfirmed(int id)
{
Person person = db.Persons.Find(id);
var address = (from u in db.Addresses
where u.PersonID.Equals(id)
select u.PersonID).SingleOrDefault();
db.Addresses.Remove(person);
db.Persons.Remove(person);
db.SaveChanges();
return RedirectToAction("Index");
}
答案 0 :(得分:0)
Person person = db.Persons.Find(id);
var address = (from u in db.Addresses where u.PersonID == id).SingleOrDefault();
if(address != null)
db.Addresses.Remove(address);
db.Persons.Remove(person);
在您的示例中,您的linq查询正在提取您已有的数据,那么您根本就没有使用地址变量。
您想要从db.Addresses中删除一个地址,而不是一个人。这也假设每个人只有一个地址。
答案 1 :(得分:0)
我只是快速浏览一下,但我认为您的问题在于代码的以下部分:
var address = (from u in db.Addresses
where u.PersonID.Equals(id)
select u.PersonID).SingleOrDefault();
尝试替换
where u.PersonID.Equals(id)
带
where u.PersonID == id
希望这适合你!
(出于兴趣,如果您查看来自LeakyCode的以下Stackoverflow响应,他已经澄清了==和Equals之间的区别:C# difference between == and Equals())
答案 2 :(得分:0)
您提到要删除属于某个人的所有地址,您需要获取这些地址并将其删除...
[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");
}