1

エンティティのプロパティが変更されたときに更新を行う適切な方法は何ですか? たとえば、アプリケーションというエンティティがあります。アプリケーションには List<TaskBases> プロパティがあります。アプリを実行しているとき、アプリケーションには TaskBases がありません。ユーザーが TaskBase をリストに追加したときに、このリストを保存する方法を簡単に知る必要があります。

Save() メソッドの最初の行は新規です。調べていたら見つけたのでやってみました。

public void Save(Application application)
{
    // This line didn't work. See error below this code snippet.
    this.Database.Entry(application).Property(app => app.Tasks).IsModified = true;
    this.SaveChanges<Application>(application);
}

protected void SaveChanges<T>(T entity) where T : EntityBase
{
    this.Database.Entry<T>(entity).State = GetState(entity);
    this.Database.SaveChanges();
}

次のエラーが表示されます:「タイプ 'Application' のプロパティ 'Tasks' は、プリミティブ プロパティまたは複雑なプロパティではありません。Property メソッドは、プリミティブ プロパティまたは複雑なプロパティでのみ使用できます。Reference メソッドまたは Collection メソッドを使用してください。」

それで、参照とコレクションを使用してみましたが、インテリセンスで役立つものは何もありません。

注: 最初の行を Save() に含めずに最初に保存しようとしたとき、TaskBases のリストの項目が DB に表示されませんでした。

必要以上に難しくしている気がします。エンティティがあり、ユーザーがリストの一部として別のエンティティを追加し、それを保存したいと考えています。私は何が欠けていますか?これはどのように行うべきですか?

編集:

Save() メソッドをこれに変更すると、次のように機能しました。

public void Save(Application application)
{
    foreach (TaskBase taskBase in application.Tasks)
    {
        this.Database.Entry<TaskBase>(taskBase).State = GetState(taskBase);
    }

    this.SaveChanges<Application>(application);
}

それはしなければならないことですか?それは正しい方法ですか?

4

1 に答える 1

0

更新を実行する通常の方法は次のようになります。

using(var context = new MyDbContext())
{
    var app = context.Applications.Single(a=>a.Id == theAppIdImInterestedIn); 
    app.Tasks.Add(new Task{ Name = "some other data" });
    context.SaveChanges();
}

これを分離したい場合は、ライフサイクルを管理するために DI コンテナーを使用してコンテキストを少し抽象化します。

于 2012-05-28T05:44:52.800 に答える