C# 在新的DbContext实例中更新EF模型
使用DbContext的两个实例更新数据库中的实体框架模型的最佳方法是什么。例如,我有一个简单的C# 在新的DbContext实例中更新EF模型,c#,.net,entity-framework,singleton,entity-framework-6,C#,.net,Entity Framework,Singleton,Entity Framework 6,使用DbContext的两个实例更新数据库中的实体框架模型的最佳方法是什么。例如,我有一个简单的用户模型,它加载在一个DbContext中,但保存在另一个中: User model = null; using(SampleDbContext dbContext = new SampleDbContext()) { model = dbContext.User.Find(0); } model.UserName = "Test-User"; using(SampleDbContext
用户
模型,它加载在一个DbContext
中,但保存在另一个中:
User model = null;
using(SampleDbContext dbContext = new SampleDbContext())
{
model = dbContext.User.Find(0);
}
model.UserName = "Test-User";
using(SampleDbContext dbContext = new SampleDbContext())
{
// Here is the place i want to save the changes of the model
// without loading it again from the database and set each property
// ...
dbCotnext.SaveChanges();
}
在我的例子中,我想编写一些UserManager
,它具有创建、更新和删除方法。我认为为howle管理器创建一个DbContext实例
没有解决方案,因为我只想保存特定模型的更改
我还不希望从数据库加载模型以再次更新,并从源实例设置每个值,如:
// Update user
using(SampleDbContext dbContext = new SampleDbContext())
{
// I don't want this:
var model = dbContect.User.Find(0);
model.UserName = sourceModel.UserName;
// ...
dbCotnext.SaveChanges();
}
也许我的管理类问题很简单,但我找不到任何好的解决方案
附言:我的经理课程通常都是单人课
谢谢。您可以在第二个DbContext中执行以下操作:
using (SampleDbContext dbContext = new SampleDbContext())
{
dbContext.Entry(model).State = EntityState.Modified;
dbContext.SaveChanges();
}
这将把您对实体所做的更改保存到数据库中。但是,我不记得是否
dbContext.Entry
查询数据库中的实体。我真的认为您需要稍微改写一下这个问题。你问的问题很不清楚。你想解释一下哪一部分不清楚吗?或者我应该添加更多的代码示例?我真的不知道。是否只想更新记录而不首先从db加载记录?如果实体不在上下文中,dbContext.Entry会查询数据库。如果您知道实体存在,您可以使用Attach
,然后将其设置为modified,如图所示。@user2697817感谢您提供的信息。是的,我同意也可以使用Attach
。这对我很有用:dbContext.Role.Attach(Role);dbContext.Entry(role).State=EntityState.Modified;dbContext.SaveChanges()代码>(角色管理器)。非常感谢。