我需要找出具有特定主键的对象是否已附加到DataContext,如果已附加,则从DataContext获取实体。有没有什么方法可以做到这一点而不需要完全信任的反射?
理想情况下,我希望调用GetCachedObject(),但我必须使用反射才能做到这一点,而且我非常确定我必须处于完全信任模式,这在托管环境中不起作用。
我愿意在这里跳出框框去思考。而且,我可以完全控制生成的LinqToSql代码,所以这也不是问题。我可以重写我的DataContext类。有没有办法访问IdentityManager,用我自己的抽象替换IdentityManager,等等?欢迎任何想法。
发布于 2010-01-22 15:06:57
一个潜在的“变通办法”。我还没有试过,所以不知道它是否会起作用......but既然你说了“开箱即用”:给DC分配一个坏的连接或坏的连接字符串,或者搞乱它已经有的sqlconnection。下一步按主键查询对象。如果它在缓存中,那么L2S很有可能不会注意到连接不好,所以您应该取回该对象。如果它不在缓存中,L2S应该尝试一个db往返,你会得到一个异常。
正如我所说的,它既脏又未经测试,但如果您真的想避免使用反射来访问身份管理器/更改跟踪器,则值得一试。虽然不确定它是否会为您节省任何CPU周期...:)
发布于 2011-09-15 03:37:25
如果您控制生成的代码,为什么不让每个实体的ctor在每个线程的字典中注册自己。这样,您就拥有了当前线程的所有现有实体。如果每个线程有一个datacontext,那么现在就有了所有已加载(但不一定附加)实体的列表。
https://stackoverflow.com/questions/2111930
复制相似问题