1

Entity Framework には、親オブジェクトへの外部キーであるフィールドのみが設定されている子オブジェクトを取得するオプションが用意されていますか?

サンプル コードは、これをよりよく示している可能性があります。

次のPOCOクラスがあると仮定します...

public abstract class Base
{
    public Guid Id { get; set; }
}

public class User : Base
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

public class Photo : Base
{
    public string Description { get; set; }
    public User UploadedBy { get; set; }
}

...そして、正しく構成したと仮定すると、オブジェクトを含むDbContextすべてのリストをどのように照会しますが、そのオブジェクトにはプロパティのみが含まれていますか?PhotosUploadedByUploadedById

私はこれができることを知っています...

return await _dbContext.Photos.Include(p => p.UploadedBy).ToListAsync();

...しかし、それはオブジェクト全体を返しUserます。

私はこのようなことをしたい...

return await _dbContext.Photos.Include(p => p.UploadedBy.Id).ToListAsync();

Id...プロパティのみを戻したいことを示します。

これらのインクルードを連鎖させることができれば、返したい子オブジェクトの各プロパティを選択できます。

またはさらに良いことに、よりグローバルなレベルで設定を構成できるようにしたいと考えていPhotosます。もっと。

ただし、各 POCO オブジェクトに対して次の拡張メソッドを作成するだけでよいため、最後の要求はそれほど重要ではありません...

   public static IQueryable<Photo> IncludeForigenKeys(this PhotoAlbumDbContext context){
         return context.Photos
             .Include(photo => photo.UploadedBy.Id);
     }
4

1 に答える 1

0

私が理解している限り、ナビゲーション プロパティを部分的に読み込む方法はありません。

ただし、外部キーの場合、Nav プロパティをロードせずにこれらにアクセスする標準的な方法は、モデルに実際のキーを含めることです。例えば:

public class Photo : Base
{
    public string Description { get; set; }
    public int UploadedById { get; set; }
    public User UploadedBy { get; set; }
}

ナビゲーション プロパティ全体を実際に読み込まなくても、この ID は入力されます。

両方をロードする場合、nav プロパティのローカルまたはリモート エンドの値を更新でき、その更新は保存時にデータベースに永続化されます。私の経験では、EF はこれに関して非常に賢いです。もう少しトリッキーになる唯一のシナリオは、EF がこの状態を維持していない単体テストです。

于 2013-05-08T03:19:52.250 に答える