【发布时间】:2015-03-19 02:58:39
【问题描述】:
我在想这样的事情:
IUoW oUoW = oUnity.Resolve<IUoW>(); //<-- New Context here (Life per resolve).
var oNewEntity = new SomeEntity{ name = "somethink ... "};
oUoW.oSomeEntity.Add( oNewEntity);
oUoW.SaveChanges();
oUoW.Dispose();//<-- delete context.
但是我该如何解析“oUoW.oSomeEntity”的实例,我可能需要在构造函数中进行解析...
我的另一种想法
IUoW oUoW = oUnity.Resolve<IUoW>(); //<-- New Context here (Life per resolve).
var oNewEntity = new SomeEntity{ name = "somethink ... "};
oSomeEntityRepository = oUnity.Resolve<ISomeEntityRepository>();//Ugly way
oSomeEntityRepository.oUoW = oUoW;//Ugly way
oSomeEntityRepository.Add( oNewEntity);
oUoW.SaveChanges();
oUoW.Dispose();//<-- Delete context.
... Open Another Context ...
那是代码不是 100% 线程安全的,但我会缩短上下文实例
你有别的想法吗? 我现在要进行单元测试...
为了线程安全,我正在考虑另一种使用互斥锁的方法......类似......
IUoW oUoW = oUnity.Resolve<IUoW>();
oUoW.MutexLock();
... save, delete, linq ...
oUoW.MutexUnlok();
mmm .... &%$··%&·!&$%&...mmm LAPSUS
【问题讨论】:
-
你的申请是什么?网络服务 ?知道会很有用。您上面的消费代码是每个线程创建的吗?
-
主题但为什么要在所有内容前加上'o'?除了它让你的代码在你大声朗读时听起来像鬼一样吗?
标签: c# multithreading entity-framework unity-container unit-of-work