我正在使用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。我把它改成了一个类,它工作正常。
我很高兴在这里使用一个类,但我想知道为什么结构在以这种方式使用时会失败。
答案 0 :(得分:4)
EntityFramework提供面向对象的数据表示。因此,结果需要是一个对象,因为它必须维持状态。如果使用结构,每次在方法之间传递列时都会复制数据,这是没有意义的,因为它表示数据库中的相同值。
答案 1 :(得分:0)
结构体不是对象,EF希望将列作为Object基类型返回。