2

私は1つの巨大な列を持つデータベーステーブルImageを持っています: Data

1 つのエンティティ

その 1 つの列を遅延読み込みしたいので、すべての画像のリストを取得するときにすべてを照会する必要はありません。

次のように、データを独自の列とエンティティに入れることができることを知っています。

2 つのエンティティ

しかし、私はしなければなりませんか?

4

2 に答える 2

4

はい、そうしなければならないと思います。EFでは不可能だと思います。

必要な列に対して明示的なクエリを作成し、後でデータ列に対してクエリを実行できます。この投稿の提案のように:

ADO.NET Entity Frameworkで必要な場合にのみvarbinary(max)フィールドをロードする方法は?

しかし、Linq To SQL がその可能性を提供しているように見えるので、EF にも来るかどうかを調べてみます。

于 2009-04-24T17:19:04.650 に答える
0

データスキーマにアクセスできますか? Entity Framework では、同じテーブルを参照する 2 つのエンティティを使用することはできません。**少なくとも以前はできませんでした。とは言うものの。データ列を使用して Sql VIEW を作成できます。

CREATE VIEW [dbo].[ImageData]
SELECT
    Id,
    Data
FROM Image

これで、上記のスキーマを反映するイメージ データと呼ばれるエンティティを作成できます。

ビューを更新する必要がある場合は、それも可能です。ビューに INSTEAD OF TRIGGER というトリガーを作成するだけです。

-- INSERT Trigger
CREATE TRIGGER [dbo].[TR_ImageData_Update] ON [ImageData]
INSTEAD OF INSERT
AS
BEGIN
    UPDATE [Image]
    SET Data = i.Data
    FROM Inserted AS i
END;
GO

これは、ほとんどの場合、おそらく理想的です。ただし、データベース スキーマにアクセスできない場合は、これを実行できない可能性があります。代わりに、イメージ エンティティから既定のクエリを作成します。

public static IQueryable GetImages(this DbContext db)
{
    var query = db.Images.AsQueryable();
    return query.Select(r => new Image() { Id = r.id....});
}

public static IQueryable GetImageData(this DbContext db, int imageId)
{
    var query = db.Images.AsQueryable();
    query = query.Where(x => x.Id == imageId);
    query = query.Select(x => new ImageData() { Id = r.Id, Data = r.Data });
    return query;
}
于 2015-06-19T21:01:15.070 に答える