使用struct而不是class的EntityFramework SqlQuery因ArgumentException而失败

时间:2012-06-19 16:01:15

标签: c# entity-framework

我正在使用EntityFramework应用程序,在使用struct而不是使用Database.SqlQuery的类时,我遇到了一个问题。

结构如下所示:

internal struct Column
{
    public int object_id { get; set; }
    public string name { get; set; }
}

并且对SqlQuery的调用如下所示:

using (var db = new DbContext("ConnectionString"))
{
    var columns = db.Database.SqlQuery<Column>(query);
    DoSomething(columns.ToList()); // Exception thrown here
}

当Column是结构时,我得到一个带有消息“类型'MyService.Column的表达式'的消息不能用于返回类型'System.Object'”的ArgumentException。我把它改成了一个类,它工作正常。

我很高兴在这里使用一个类,但我想知道为什么结构在以这种方式使用时会失败。

2 个答案:

答案 0 :(得分:4)

EntityFramework提供面向对象的数据表示。因此,结果需要是一个对象,因为它必须维持状态。如果使用结构,每次在方法之间传递列时都会复制数据,这是没有意义的,因为它表示数据库中的相同值。

答案 1 :(得分:0)

结构体不是对象,EF希望将列作为Object基类型返回。