使用 EF Code First 从数据库中删除行

发布于 2024-10-28 11:01:11 字数 587 浏览 3 评论 0原文

我尝试使用以下函数来删除项目:

        internal static bool Remove(T record)
        {

            int result = 0;

            // get db set
            DatabaseDbContext context = new DatabaseDbContext();
            DbSet<T> set = context.Set<T>();

            // remove item
            set.Remove(record);

            // clean up
            context.Dispose();
            record.Dispose();

            // return result 
            return result > 0;
        }

我收到错误:“无法删除该对象,因为在 ObjectStateManager 中找不到该对象。”

我该如何修改它才能像我想要的那样工作?

I try to use the following function to remove a item:

        internal static bool Remove(T record)
        {

            int result = 0;

            // get db set
            DatabaseDbContext context = new DatabaseDbContext();
            DbSet<T> set = context.Set<T>();

            // remove item
            set.Remove(record);

            // clean up
            context.Dispose();
            record.Dispose();

            // return result 
            return result > 0;
        }

I get the error: "The object cannot be deleted because it was not found in the ObjectStateManager."

How can I modify this to work like I want?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

顾铮苏瑾 2024-11-04 11:01:11

您可以使用 Attach 将现有记录附加到当前上下文。这可以让您避免从数据库中检索记录以将其删除。

context.Set<T>().Attach(item);

You can use Attach to attach an existing record to the current context. This lets you avoid retrieving the record from the database in order to delete it.

context.Set<T>().Attach(item);
江南月 2024-11-04 11:01:11

您可以使用 ObjectContext.Attach 方法

调用 ObjectContext 上的 Attach 将对象附加到对象上下文。当对象已存在于数据源中但当前未附加到上下文时执行此操作

You could use ObjectContext.Attach Method.

Call Attach on the ObjectContext to attach the object to the object context. Do this when the object already exists in the data source but is currently not attached to the context

温柔戏命师 2024-11-04 11:01:11

解决了,但是还有更好的办法吗?

        internal static bool Remove(T record)
        {

            int result = 0;

            // remove item
            DatabaseDbContext context = new DatabaseDbContext();
            T item = context.Set<T>().Where(r => r.Id == record.Id).FirstOrDefault();
            context.Set<T>().Remove(item);
            result = context.SaveChanges();

            // clean up
            context.Dispose();
            record.Dispose();

            // return result 
            return result > 0;
        }

Solved it, but there has to be a better way?

        internal static bool Remove(T record)
        {

            int result = 0;

            // remove item
            DatabaseDbContext context = new DatabaseDbContext();
            T item = context.Set<T>().Where(r => r.Id == record.Id).FirstOrDefault();
            context.Set<T>().Remove(item);
            result = context.SaveChanges();

            // clean up
            context.Dispose();
            record.Dispose();

            // return result 
            return result > 0;
        }
苄①跕圉湢 2024-11-04 11:01:11

试试这个

 context.Entry(record).State = EntityState.Deleted;
 context.SaveChanges();

Try this

 context.Entry(record).State = EntityState.Deleted;
 context.SaveChanges();
友谊不毕业 2024-11-04 11:01:11

使用 InsertedDate 删除实体范围的另一种方法

 public bool Delete_Programs_By_Date(DateTime programDate)
        {
            try
            {
                using (var db = new Context())
                {
                   db.Program.RemoveRange(db.Program.Where(x => x.InsertedDate == programDate).ToList());
                    db.SaveChanges();
                }
                return true;
            }
            catch
            {
                return false;
            }
        }

Another way to delete Range of entities using InsertedDate

 public bool Delete_Programs_By_Date(DateTime programDate)
        {
            try
            {
                using (var db = new Context())
                {
                   db.Program.RemoveRange(db.Program.Where(x => x.InsertedDate == programDate).ToList());
                    db.SaveChanges();
                }
                return true;
            }
            catch
            {
                return false;
            }
        }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文