0

我需要确定具有特定主键的对象是否已附加到 DataContext 并从 DataContext 获取实体(如果已附加)。有没有什么方法不需要完全信任的反射?

理想情况下,我想调用 GetCachedObject(),但我必须使用反射来实现,而且我很确定我必须处于完全信任模式,这在托管环境中不起作用.

我愿意在这里跳出框框思考。另外,我可以完全控制生成的 LinqToSql 代码,所以这也不是问题。我可以重写我的 DataContext 类。有什么方法可以访问 IdentityManager,用我自己的抽象替换 IdentityManager,等等?欢迎任何和所有想法。

4

2 回答 2

0

一种潜在的“解决方法”。我没试过,所以不知道它是否会工作......但既然你说'开箱即用':给DC分配一个坏的连接或坏的连接字符串,或者搞乱sqlconnection它已经有了。接下来通过 PK 查询对象。如果它在缓存中,L2S 很可能不会注意到连接不良,因此您应该取回该对象。如果它不在缓存中,L2S 应该尝试一个 db 往返,你会得到一个异常。

正如我所说,肮脏且未经测试,但如果您真的想避免使用反射来访问身份管理器/更改跟踪器,则值得尝试。不确定它是否会为您节省任何 CPU 周期... :)

于 2010-01-22T07:06:56.510 回答
0

如果您控制生成的代码,为什么不让每个实体的 ctor 将自己注册到每个线程的字典中。这样你就拥有了当前线程的所有现有实体。如果每个线程有一个数据上下文,那么您现在拥有所有已加载(但不一定附加)实体的列表。

于 2011-09-14T19:37:24.963 回答