如何在删除人员之前获取personID删除地址

时间:2014-02-12 20:54:21

标签: c# asp.net-mvc entity-framework

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");
    }

3 个答案:

答案 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");
}