0

「ヒーロー」と呼ばれるテーブルを更新しようとしています。使用しDataContextています。コードは次のようになります。-

//linq to sql table (automatic generated)
[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.Hero")]
    public partial class Hero : INotifyPropertyChanging, INotifyPropertyChanged
    {
          //fields methods etc..
    }

そして、私自身の部分的なクラスのヒーローがいます...

    public partial class Hero : IHero {
           //my fields and methods etc...

            public void Save() {
                using(GameDBDataContext db = new GameDBDataContext()) {
                    db.Heros.Attach(this, true);
                    db.SubmitChanges();
                }
        }
}

しかし、これを投げています:-

System.InvalidOperationException: An entity can only be attached as modified without original state if it declares a version member or does not have an update check policy.

この問題の解決策は何ですか?

編集:私はこれを試しました:-

public void Save() {
    using(GameDBDataContext db = new GameDBDataContext()) {
        db.Heros.Attach(this, db.Heros.SingleOrDefault(x => x.id == EntityID));
    }
}

そしてそれは投げます:-System.NotSupportedException: An attempt has been made to Attach or Add an entity that is not new, perhaps having been loaded from another DataContext. This is not supported.

4

1 に答える 1

0

Attachメソッドを正しく使用していないと思います。このhttp://msdn.microsoft.com/en-us/library/bb548978.aspxを見ましたか?

渡すオブジェクトが (デシリアライズではなく) コードで作成された場合、おそらく機能しません。逆シリアル化によって作成された場合は、元のオブジェクトのコピーを作成して変更し、変更されたエンティティと変更されていないエンティティを受け入れるオーバーロードを使用することをお勧めしますAttach(Entity old, Entity new)

于 2012-11-02T23:21:42.920 に答える