当前位置:  开发笔记 > 编程语言 > 正文

LINQ-to-SQL:ExecuteQuery(Type,String)填充一个字段,但不填充另一个字段

如何解决《LINQ-to-SQL:ExecuteQuery(Type,String)填充一个字段,但不填充另一个字段》经验,为你挑选了1个好方法。

我编写了一个应用程序,我用它作为代理来查询数据库中的数据并自动将其加载到我的分布式Web缓存中.

我这样做是通过在配置中指定sql查询和类型.实际执行查询的代码如下所示:

List result = null;
try { result = dc.ExecuteQuery(elementType, entry.Command).OfType().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

出于某种原因,在执行查询时,"Count"属性最终会填充,但不会填充"FooId"属性.我自己尝试运行查询,并返回正确的列名,列名与我在映射属性中指定的名称相匹配.救命!



1> Daniel Schaf..:

疯了吧...

解决我的问题的是用以下方法装饰我的实体类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()方法,所以我不需要相应的映射属性.

更新:一年半之后,它终于明白了,似乎属性上的ColumnAttribute装饰被忽略,除非在类上有相应的TableAttribute修饰.这解释了为什么"Count"属性被填充,因为它的命名将匹配SQL语句中的列,而FooId/foo_id当然不匹配.

推荐阅读
php
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有