1

私はEntity Framework v4(VS2010 Beta 2に付属しています)+を使用しましPOCOた。データベースから poco にデータを完全にロードできます。

現在、単一の poco インスタンスがあり、EF4 を使用して DB に保存する方法がわかりません。誰か助けてくれませんか?POCOが「変更」されたことをEF4が知らないからだと思いますか?とにかく、ここに私が試していたコードがありますが、うまくいきません。(データベースへの挿入は行いますが、POCO を Identity 値で更新しません。)

(古き良きNorthwindデータベースに基づく...)

public void Save(Category category)
{
    // Error handling ommited...

    bool isInsert = category.CategoryId <= 0;

    // Note: Category is a POCO, not an entity object.
    Category newCategory = isInsert
        ? new Category()
        : ((from l in Context.Categories
            .WithCategoryId(category.CategoryId)
            select l).SingleOrDefault() ?? new Category());

    // Left 2 Right.
    newCategory.Name = category.Name;
    // continue setting the properties.

    // Context is a private property, representing the EF context.
    Context.LogEntries.AddObject(newLogEntry);
    Context.SaveChanges();
}

このコードは、Linq-To-Sql で行ったことに基づいています (これはうまく機能します!) 一般的なロジック フローは次のとおりです:-

  1. 既存のオブジェクトを取得します。存在しない場合は、新しいものを作成します。
  2. この既存または新規オブジェクトのすべてのプロパティを設定します。これにより、オブジェクトの状態が更新されます。変更されたものがある場合、オブジェクトは変更されます。それ以外の場合は新しいです。
  3. オブジェクトを保存します。

では、この概念を EF4 で繰り返すことはできますか?

乾杯 :)

4

2 に答える 2

1

状態が変わってもよろしいですか?
Context.DetectChanges()をチェックアウトすることをお勧めします

http://msdn.microsoft.com/en-us/library/dd456854(VS.100).aspx

于 2009-12-09T03:42:00.593 に答える
1

EF では、新しい (挿入する) オブジェクトAttachではなく、既存の (更新する) オブジェクトに使用する必要があります。AddObjectそれ以外は動作するはずです。

于 2009-12-09T13:44:34.977 に答える