2011-04-01 47 views
0

我有这样的语境下面的方法重写:EF 4似乎无法调用的SaveChanges

public class MyContext : DbContext 
    { 
    public DbSet<Contract> Contracts{get;set;} 
    public override int SaveChanges() 
    { 
     Contract ctr = new Contract 
     { 
      ContractId = "CT99999991", 
      ContractNumber = "9000", 
      LastModifiedDate = DateTime.Now, 
      GracePeriod = DateTime.Now, 
      ShipByDate = DateTime.Now, 
      ExpirationDate = DateTime.Now 
     }; 
     this.Contracts.Add(ctr); 
     return base.SaveChanges(); 
    } 
    } 

不管是什么我想,我从来没有在制作这部分代码成功得手。 我很想在SaveChanges事件发生时将上层合约保存在数据库中。 有什么我可以忽略的?

+0

是的,你做错了! j/k,你可能想要发布错误消息/异常。 – stefan 2011-04-01 03:04:25

+0

嗨stefan,当我通过更新和保存一个对象来执行代码时,并没有抛出异常。 – Attilah 2011-04-01 03:08:50

+0

也许这会有助于更好地理解为什么重写SaveChanges()方法? – BrandonZeider 2011-04-01 12:30:14

回答

0

我挂钩到自定义上下文类(类MyContext:DbContext),它不工作。

我终于诉诸于挂钩到WCF数据服务类(类MyDataService:DataService),它运作良好。

1

这不是我试图自己做的事情,但可能是因为你已经在SaveChanges()方法中,上下文的变更列表已经被创建。所以,当你添加新的Contract上下文的Contracts集合,你必须让你的背景下重建其需要调用base.SaveChanges()

+0

如何让上下文重建其更改列表? – Attilah 2011-04-01 12:16:42

+0

我还没有尝试这样做,但是在ObjectContext上(我假设'DbContext'的工作原理与此相同),有一个'DetectChanges()'方法应该用新的更改来更新ObjectStateManager。这似乎是低效的重新评估每个加载的条目,所以你可以尝试直接与'ObjectStateManager'交互,我认为它会是'this.ObjectStateManager.ChangeObjectState(ctr,EntityState.Added);' – 2011-04-01 14:05:10