实体框架添加和删除实体
本文关键字:实体 删除 添加 框架 | 更新日期: 2023-09-27 17:50:00
我看到两个代码用于添加和删除实体,我想知道哪一个是最好的方式,这两者之间的区别是什么。一个是(用于添加):
using (var context = new BloggingContext())
{
var blog = new Blog { Name = "ADO.NET Blog" };
context.Blogs.Add(blog);
context.SaveChanges();
}
,另一个是:
using (var context = new BloggingContext())
{
var blog = new Blog { Name = "ADO.NET Blog" };
context.Entry(blog).State = EntityState.Added;
context.SaveChanges();
}
,我读到调用DbSet上的Add方法将实体置于已添加状态。
据此,我认为以上两个代码几乎是相同的。如果不是,请告诉我有什么不同。
我找到的另一个代码是:
public virtual void Add(T entity)
{
DbEntityEntry dbEntityEntry = DbContext.Entry(entity);
if (dbEntityEntry.State != EntityState.Added)
{
dbEntityEntry.State = EntityState.Added;
}
else
{
DbSet.Add(entity);
}
}
如果在DbSet上调用Add方法将实体置于已添加状态,那么我认为if和else块中的代码没有区别,那么这里的重点是什么呢?
并从以上三个代码中找出添加实体的最佳方式。
另一个让我怀疑的代码是下面代码中的else块的用途:
public virtual void Delete(T entity)
{
DbEntityEntry dbEntityEntry = DbContext.Entry(entity);
if (dbEntityEntry.State != EntityState.Deleted)
{
dbEntityEntry.State = EntityState.Deleted;
}
else
{
DbSet.Attach(entity);
DbSet.Remove(entity);
}
}
我不认为将实体的状态设置为已添加有什么巨大的好处,因为创建一个新实体并将其添加到集合中就像您提到的那样。当你想要删除一个实体而不需要先从数据库中获取它时,这种模式非常有用:
// this entity will be unattached at this point, so if you were to call remove
// on the dbset it wouldn't do much, since it doesn't think it's in the database
var deleteThisEntity = new Blog { Id = 5 };
// if you set the state to deleted, it now thinks that it needs to be deleted
db.Entry(deleteThisEntity).State = EntityState.Deleted;
// call SaveChanges to delete
db.SaveChanges();
您可以通过将状态设置为modified来获得类似的效果,因此它将触发更新语句。有时候,您只是不想从数据库中获取一个项来删除它。
使用下面的代码为asp.net添加模式是非常标准的做法。
using (var context = new BloggingContext())
{
var blog = new Blog { Name = "ADO.NET Blog" };
context.Blogs.Add(blog);
context.SaveChanges();
}
在delete代码中,if/else语句用于检查获取的对象是否有效。
我一直在使用DELETE模式的代码是这样的:
var fetchedObject = context.Blog.Find(id);
if (fetchedObject == null)
{
return false;
}
else
{
ds.Blog.Remove(fetchedObject);
return true;
}
这是Manager类中接收id的方法。