使用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();
}
“附加” - 哦谢谢。非常感谢:-)我会尝试一下吧! – Arrow 2012-07-25 11:37:51
对不起,但没有工作。它说:'一个EntityKey值为null的对象不能附加到对象上下文中。' – Arrow 2012-07-25 11:39:58
请参阅上面的编辑... – podiluska 2012-07-25 11:45:34