2013-01-11 80 views
0

我使用2个不同类中的实体框架容器。实体框架System.InvalidOperationException

private static DataManager instance; 
    private Model1Container databaseContainer; 
    private DataManager() 
    { 
     databaseContainer = new Model1Container(); 
    } 

    public static IDataManager Instance 
    { 
     get 
     { 
      if (instance == null) 
      { 
       instance = new DataManager(); 
      } 
      return instance; 
     } 
    } 

    public void OpenNewAccount(int amount) 
    { 

     Account account = new Account(); 

     Transaction transaction = new Transaction(); 
     transaction.Account = account; 
     transaction.Amount = amount; 
     transaction.Date = DateTime.Now; 

     if (TransactionExecutor.Instance.ExecuteTransaction(transaction, account)) 
     { 
      //EXCEPTION An unhandled exception of type     'System.InvalidOperationException' occurred in System.Data.Entity.dll 

      //Additional information: An entity object cannot be referenced by multiple instances of IEntityChangeTracker. 
      databaseContainer.Transactions.AddObject(transaction); 
      databaseContainer.Accounts.AddObject(account); 
      databaseContainer.SaveChanges(); 
     } 
    } 

class AccountStateTransactionValidator : AbstractTransactionValidator 
{ 
    override 
    public bool HandleTransaction(Transaction transaction, Account account) 
    { 
     if (account.AccountState == null || (account.Amount < account.AccountState.LeftBound || account.Amount >= account.AccountState.RightBound)) 
     { 
      Model1Container container = new Model1Container(); 
      AccountState properState = (from st in container.AccountStates 
           where st.LeftBound <= account.Amount && 
           st.RightBound >= account.Amount 
           select st).FirstOrDefault(); 
      if (properState != null) 
      { 
       account.AccountState = properState; 
      } 
      else 
      { 
       return false; 
      } 
     } 

     return base.nextTransaction(transaction, account); 

    } 
} 

而且我得到这个异常:

at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) 
    at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) 
    at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() 
    at System.Threading.ThreadHelper.ThreadStart_Context(Object state) 
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx) 
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 
    at System.Threading.ThreadHelper.ThreadStart()</ExceptionString></Exception></TraceRecord> 
An unhandled exception of type 'System.InvalidOperationException' occurred in System.Data.Entity.dll` 

我不想修改我的阶级结构,我可以在这种情况下使用实体框架是否正确?怎么样?

感谢您的答案。

回答

2

你混合多个数据上下文:account连接到databaseContainerdatabaseContainer.Transactions.AddObject(transaction);accounttransaction嵌套属性),而是从Model1Container container = new Model1Container();

您不能同时在多个上下文中使用实体的实例。


我也看到某种的数据容器,这通常是一个坏,坏,坏主意Singleton模式...

+0

谢谢您的回答,我该怎么修改我的代码做他的工作和使用这些模式(resposibility链)。为什么单身人士模式是坏的,坏的,坏主意。请解释我,我很好奇。再次感谢您的回答 – flatronka