LINQ2SQL:如何在加载匿名实体时修改字段值?

Dim*_*ima 10 .net entities linq-to-sql

!请不要重定向到本文,因为它没有解决下面描述的问题.

假设我们在数据库中有这样的表:

SomeTable

  • ID(int)
  • DT(日期时间)

我们已经配置了Linq2Sql数据上下文.我们为SomeTable配置了一个实体:OnLoaded方法以DT的DateTimeKind变为Utc(最初是未指定的)的方式修改DT.

现在问题是:

如果我们使用整个实体请求数据,则调用OnLoaded方法:

From x In ourDataContext.SomeTable Select x
Run Code Online (Sandbox Code Playgroud)

但是如果我们只请求表的一部分(因此生成一个匿名类型),则不会调用OnLoaded:

From x In ourDataContext.SomeTable Select x.DT
Run Code Online (Sandbox Code Playgroud)

很明显,OnLoaded是在SomeTable实体中定义的,而不是匿名类型.

目前我考虑创建可替代匿名类型的自定义实体.但也许有人有更好的解决方案?

Eps*_*neR 1

我们遇到了类似的问题,因为我们需要从实体接收部分字段作为匿名对象,并且始终知道我们有DateTimeKind日期字段,DateTimeKind.UTC而不需要在 LINQ 请求中使用其他函数。

我们尝试了很多方法,但只找到了一个足够好的解决方案 - 使用 T4 为 Linq2Sql 生成代码。

PS如果您想了解有关T4的Linq2Sql代码生成的更多信息,您可以从http://www.hanselman.com/blog/T4TextTemplateTransformationToolkitCodeGenerationBestKeptVisualStudioSecret.aspx开始