Entity framework 实体框架6 dbContext不保存更改

Entity framework 实体框架6 dbContext不保存更改,entity-framework,asp.net-mvc-5,asp.net-identity,Entity Framework,Asp.net Mvc 5,Asp.net Identity,在我们的MVC5项目中,我们的数据库上下文在AccountController中实例化,如下所示 private CustomersContext _customersContext; public CustomersContext CustContext { get { return _customersContext ?? new CustomersContext(); } pr

在我们的MVC5项目中,我们的数据库上下文在
AccountController
中实例化,如下所示

    private CustomersContext _customersContext;

    public CustomersContext CustContext
    {
        get
        {
            return _customersContext ?? new CustomersContext();
        }
        private set
        {
            _customersContext = value;
        }
    }
{
public partial class CustomersContext : IdentityDbContext<ApplicationUser>//, ICustomersContext
{

    public CustomersContext()
        : base("DefaultConnection", throwIfV1Schema: false)
    {
    }

    public static CustomersContext Create()
    {
        return new CustomersContext();
    }

    public virtual DbSet<ReferralSource> ReferralSources { get; set; }
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);

        modelBuilder.Entity<ApplicationUser>()
            .HasMany(e => e.Referrals)
            .WithRequired(e => e.User)
            .HasForeignKey(e => e.UserId)
            .WillCascadeOnDelete(false);
每个客户都有多个来源。下面的例程将引用源的UserId更改为新用户

        var referralList = CustContext.Referrals.Where(d => d.UserId == membershipUser.Id);
        foreach (Referral referral in referralList)
        {
            referral.UserId = newUser.Id;
        }
通过代码,我可以看到
referral.UserId
正在更新。然而

var result = await CustContext.SaveChangesAsync();
返回0。数据库未更新

CustomersContext
如下所示

    private CustomersContext _customersContext;

    public CustomersContext CustContext
    {
        get
        {
            return _customersContext ?? new CustomersContext();
        }
        private set
        {
            _customersContext = value;
        }
    }
{
public partial class CustomersContext : IdentityDbContext<ApplicationUser>//, ICustomersContext
{

    public CustomersContext()
        : base("DefaultConnection", throwIfV1Schema: false)
    {
    }

    public static CustomersContext Create()
    {
        return new CustomersContext();
    }

    public virtual DbSet<ReferralSource> ReferralSources { get; set; }
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);

        modelBuilder.Entity<ApplicationUser>()
            .HasMany(e => e.Referrals)
            .WithRequired(e => e.User)
            .HasForeignKey(e => e.UserId)
            .WillCascadeOnDelete(false);
{
公共部分类CustomerContext:IdentityDbContext/,ICCustomerContext
{
公共CustomerContext()
:base(“DefaultConnection”,throwifvv1schema:false)
{
}
公共静态CustomerContext创建()
{
返回新的CustomerContext();
}
公共虚拟数据库集引用源{get;set;}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
基于模型创建(modelBuilder);
modelBuilder.Entity()
.HasMany(e=>e.推荐)
.WithRequired(e=>e.User)
.HasForeignKey(e=>e.UserId)
.WillCascadeOnDelete(假);

我看不到sql Profiler中发出任何sql。为什么数据库上下文不保存更改?

在调用
var result=wait CustContext.savechangesync();
之前,需要设置要修改的实体的状态。例如:

var referralList = CustContext.Referrals.Where(d => d.UserId ==     membershipUser.Id);
foreach (Referral referral in referralList)
{
    referral.UserId = newUser.Id;
    CustContext.Entry(referral).State = System.Data.Entity.EntityState.Modified;
}
var result = await CustContext.SaveChangesAsync();

在调用
var result=wait CustContext.savechangesync();
之前,需要设置要修改的实体的状态。例如:

var referralList = CustContext.Referrals.Where(d => d.UserId ==     membershipUser.Id);
foreach (Referral referral in referralList)
{
    referral.UserId = newUser.Id;
    CustContext.Entry(referral).State = System.Data.Entity.EntityState.Modified;
}
var result = await CustContext.SaveChangesAsync();

@Issac提供的答案并没有解决我的问题,但它确实让我走上了解决问题的道路。错误

An entity object cannot be referenced by multiple instances of IEntityChangeTracker.
建议存在多个dbContext实例。我从CTOR中删除了该上下文,并在using语句中实例化了该上下文

using (CustomersContext customersContext = new CustomersContext())
{
    var referralList = customersContext.Referrals.Where(d => d.UserId == membershipUser.Id);
    foreach (Referral referral in referralList)
    {
        referral.UserId = newUser.Id;
    }
    var result = await customersContext.SaveChangesAsync();
}

现在一切都很顺利,@Issac提供的答案并没有解决我的问题,但它确实让我走上了解决问题的道路

An entity object cannot be referenced by multiple instances of IEntityChangeTracker.
建议存在多个dbContext实例。我从CTOR中删除了该上下文,并在using语句中实例化了该上下文

using (CustomersContext customersContext = new CustomersContext())
{
    var referralList = customersContext.Referrals.Where(d => d.UserId == membershipUser.Id);
    foreach (Referral referral in referralList)
    {
        referral.UserId = newUser.Id;
    }
    var result = await customersContext.SaveChangesAsync();
}

现在一切都是滴答作响的boo

尝试在Try/catch中包装它尝试使用just SaveChanges(),不使用async我尝试在Try/catch块中包装它。没有引发异常。我尝试了SaveChanges(不使用async)。没有更新记录。尝试在Try/catch中包装它尝试使用just SaveChanges(),没有异步我尝试将其包装在try/catch块中。没有引发异常。我尝试了SaveChanges(没有异步)。没有更新记录。谢谢@Issac。当我添加
CustContext.Entry(引用)时.State=System.Data.Entity.EntityState.Modified;
I get
一个实体对象不能被多个EntityChangeTracker实例引用。
@Vague请查看更新记录。另外,您能发布更多控制器或服务代码吗?谢谢@Issac。当我添加
CustContext.Entry(参考)时.State=System.Data.Entity.EntityState.Modified;
I get
一个实体对象不能被多个IEntityChangeTracker实例引用。
@Vague请查看更新记录。另外,您可以发布更多控制器或服务代码吗?