LINQ到SQL:的executeQuery(类型,字符串)填充一个字段,而不是其他
-
09-09-2019 - |
题
我已经写了我用作为代理从数据库中查询的数据,并自动加载到我的分布式Web缓存的应用程序。
我通过指定一个SQL查询,并在结构的类型执行此操作。实际执行所述查询的代码看起来是这样的:
List<Object> result = null;
try { result = dc.ExecuteQuery(elementType, entry.Command).OfType<Object>().ToList(); }
catch (Exception ex) { HandleException(ex, WebCacheAgentLogEvent.DatabaseExecutionError); continue; }
elementType
距离(使用Type.GetType()
)在配置中指定的类型创建一个System.Type的,并且是entry.Command
SQL查询。
在特定实体类型我在使用如下所示的问题:
public class FooCount
{
[Column(Name = "foo_id")]
public Int32 FooId { get; set; }
[Column(Name = "count")]
public Int32 Count { get; set; }
}
在SQL查询看起来像这样:
select foo_id as foo_id, sum(count) as [count]
from foo_aggregates
group by foo_id
order by foo_id
出于某种原因,在执行查询时,“计数”属性结束填充,但不是“FooId”属性。我试图运行查询自己,并返回正确的列名和列名匹配什么我在我的映射属性所指定。救命啊!
解决方案
这是疯...
什么固定我的问题是装饰我的实体类TableAttribute
:
[Table(Name = "foo_aggregates")]
public class FooCount
{
[Column(Name = "foo_id")]
public Int32 FooId { get; set; }
[Column(Name = "count")]
public Int32 Count { get; set; }
}
我曾假定(错误地,显然),由于我没有使用的GetTable<T>()
方法,我并不需要相应的映射属性。
更新:一年半后,终于明白了我,好像在性能ColumnAttribute装饰被忽略,除非有一个在类的相应TableAttribute装饰。这就解释了为什么“伯爵”财产被越来越稀少,因为它的命名将匹配在SQL语句中的列,而FooId / foo_id当然不匹配。
其他提示
的LINQ to SQL具有当属性的名称比列的名称不同很难映射东西。试着改变你的属性的名称用下划线foo_id。这应该向特技。
要么,你可以改变你的选择语句foo_id为FooId匹配你的财产。无论哪种方式,它们应该是相同的(不必是相同的情况下,虽然)。
不隶属于 StackOverflow