C# 在新的DbContext实例中更新EF模型

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的两个实例更新数据库中的实体框架模型的最佳方法是什么。例如,我有一个简单的
用户
模型,它加载在一个
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()(角色管理器)。非常感谢。