0

テーブルがそれ自体と多対多の関係を持つように、複数の階層に編成された一連のアセットを含むテーブルがあります(各アセットは複数の子と複数の親を持つことができます)。次のコードを使用して、子アセットの親を再割り当てしています。コードが冗長に見えることに気づきました。単に子オブジェクトを使用して関係を変更する前は、徹底的に、子オブジェクトと親オブジェクトの両方から関係を変更してみることにしました。

int NewParentID = Int32.Parse(e.CommandArgument.ToString());
Asset NewParent = DataContext.Assets.Where(asset => asset.AssetID == NewParentID).First();
Asset Child = DataContext.Assets.Where(asset => asset.AssetID == AssetID).First();
IEnumerable<Asset> OldParents = Child.ParentAssets.Where(asset => asset.AssetType == Child.OrganizationalParentAssetType);
foreach (Asset a in OldParents)
{
    a.ChildAssets.Remove(Child);
    Child.ParentAssets.Remove(a);
}
Child.ParentAssets.Add(NewParent);
NewParent.ChildAssets.Add(Child);
DataContext.SaveChanges();

DataContext.SaveChanges()がこのコードで行われている関係の変更を保持しない理由を誰かが考えることができますか?単純なプロパティ値の変更は問題なく機能します(たとえば、Child.AssetName = "Whatever"はデータベースに保持され、問題はありません)。

どんな助けでも大歓迎です!

よろしく、

トレバー

4

1 に答える 1

0

私の間違い。LazyLoadingを有効にしました。

于 2011-06-14T23:42:12.563 に答える