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

我正在研究一个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(query); DoSomething(columns.ToList()); // Exception thrown here } 

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

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

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

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