2

私は EntityFramework アプリケーションに取り組んでおり、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 が発生します。クラスに変更しましたが、正常に動作します。

ここでクラスを使用できて満足していますが、このように使用すると構造体が失敗するのはなぜだろうかと思っています。

4

2 に答える 2

4

EntityFramework は、データのオブジェクト指向表現を提供します。そのため、状態を維持する必要があるため、結果はオブジェクトである必要があります。構造体を使用すると、メソッド間で列を渡すたびにデータがコピーされますが、データベースからの同じ値を表しているため意味がありません。

于 2012-06-19T16:14:57.980 に答える
0

構造体はオブジェクトではなく、EF は列をオブジェクトの基本型として返したいと考えています。

于 2012-06-19T16:09:57.620 に答える