使用ADO.NET删除数据库条目

问题描述:

我有以下代码连接到我的数据库,并检查电子邮件地址是否存在于表中,如果存在,它将删除它,如果没有,它将添加它。使用ADO.NET删除数据库条目

但这两个选项都不起作用。我得到了两个动作相同的错误:

对象不能被删除,因为它没有在 ObjectStateManager找到。

代码:

protected OEntities database = new OEntities(); 

public string NewsletterSubscriptionValidation(string emailAddress) 
{ 
    string validationMessage = ""; 
    Newsletter newsletter = new Newsletter(); 

    var identifier = database.Newsletters.Select(
     id => id.EmailAddress); 

    if (identifier == null) 
    { 
     newsletter.EmailAddress = emailAddress; 
     newsletter.Subscribed = true; 

     database.Newsletters.AddObject(newsletter); 
     database.SaveChanges(); 

     validationMessage = "You are now subscribed to our periodic Newsletter."; 
    } 
    else 
    { 
     newsletter.EmailAddress = emailAddress; 
     newsletter.Subscribed = false; 


     database.DeleteObject(newsletter); 
     database.SaveChanges(); 

     validationMessage = "You have been unsubscribed from our periodic Newsletter."; 
    } 

    return validationMessage; 
} 

难道我甚至增加/删除数据库中的正确方法,在这里?

解决方案


protected OEntities database = new OEntities(); 

public string NewsletterSubscriptionValidation(string emailAddress) 
{ 
    string validationMessage = ""; 
    Newsletter newsletter = database.Newsletters.FirstOrDefault(
     nl => nl.EmailAddress == emailAddress); 

    if (newsletter == null) 
    { 
     newsletter = new Newsletter(); 

     newsletter.EmailAddress = emailAddress; 
     newsletter.Subscribed = true; 

     database.AddToNewsletters(newsletter); 
     //database.Newsletters.AddObject(newsletter); 
     database.SaveChanges(); 

     validationMessage = "You are now subscribed to our periodic Newsletter."; 
    } 
    else 
    { 
     newsletter.EmailAddress = emailAddress; 
     newsletter.Subscribed = true; 

     database.AddToNewsletters(newsletter); 
     //database.Newsletters.AddObject(newsletter); 
     database.SaveChanges(); 

     validationMessage = "You have been unsubscribed from our periodi Newsletter."; 
    } 

    return validationMessage; 
} 

您需要删除

database.Attach(newsletter); 
    database.DeleteObject(newsletter); 
    database.SaveChanges(); 

之前附加,但你可能想选择现有的资料更多类似这样

Newsletter newsletter = database.Newsletters.FirstOrDefault(nl => nl.EmailAddress == emailAddress); 
if (newsletter == null) 
{ 
    newsletter = new Newsletter(); 
    ... 
} 
else 
{ 
    database.Attach(newsletter); 
    database.DeleteObject(newsletter); 
    database.SaveChanges(); 
} 
+0

“附加” - 哦谢谢。非常感谢:-)我会尝试一下吧! – Arrow 2012-07-25 11:37:51

+0

对不起,但没有工作。它说:'一个EntityKey值为null的对象不能附加到对象上下文中。' – Arrow 2012-07-25 11:39:58

+1

请参阅上面的编辑... – podiluska 2012-07-25 11:45:34