【发布时间】:2016-03-16 23:48:03
【问题描述】:
我正在创建一个 Web API,并且我正在使用 Ninject 的依赖注入。
我有:
IRTW 存储库 模型工厂
我像这样将这 2 个注入到我的控制器中。
private static void RegisterServices(IKernel kernel)
{
kernel.Bind<IRTWRepository>().To<RTWRepository>();
kernel.Bind<RTWAPIContext>().To<RTWAPIContext>();
kernel.Bind<IModelFactory>().To<ModelFactory>();
}
我的 RTWRepository 构造函数如下所示
public class RTWRepository :IRTWRepository
{
private RTWAPIContext _context;
public RTWRepository(RTWAPIContext context)
{
_context = context;
}}
我的 ModelFactory 构造函数如下所示
public class ModelFactory : IModelFactory
{
private IRTWRepository _repo;
public ModelFactory(IRTWRepository repo)
{
_repo = repo;
}
}
我有一个如下所示的控制器:
public MaterialsController(IRTWRepository repository,IModelFactory modelFactory)
: base(repository,modelFactory)
{
}
现在,我的问题是:Ninject 在创建我的 RTWRepository 实例以及创建 ModelFactory 实例时是否创建了 2 个单独的上下文?
我之所以问这个问题是因为当我尝试将一个依赖于另一个对象的实体保存到之前从数据库中检索到的另一个对象时遇到了问题。
我将实体保存在我的控制器中,但我在我的模型工厂中创建它以及依赖项。
public class RecycleCenter
{
public RecycleCenter()
{
}
public int MyProperty { get; set; }
[Required]
public virtual Address Address { get; set; }
}
上面的代码是针对具有地址的实体回收中心,这个回收中心实体是在我的模型工厂中创建的,然后在我的控制器中我尝试保存它但是当我的存储库执行此行时
_context.RecycleCenters.Add(entity);
我收到了这个错误
An entity object cannot be referenced by multiple instances of IEntityChangeTracker
所以,在我的代码中某处我使用 2 上下文而不是 1,我认为在创建 ModelFactory 和 RTWRepository 时,这个假设是否正确?如果是,我该如何解决?
【问题讨论】:
标签: c# asp.net .net entity-framework