繁体   English   中英

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

[英]Deleting DB entry with 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(); 
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM