我已经写了我用作为代理从数据库中查询的数据,并自动加载到我的分布式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匹配你的财产。无论哪种方式,它们应该是相同的(不必是相同的情况下,虽然)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top