Entity Framework 関数マッピングでストアドパラメーターと結果列のバインドに同じプロパティを割り当てるとダメぽ
SaveChangesメソッドで下記エラー発生!
System.Data.UpdateException が発生しました。
Message="依存操作の有効な順序を特定できません。外部キー制約、モデル要件、またはストア生成の値により、依存関係が存在している可能性があります。"
Source="System.Data.Entity"
StackTrace:
場所 System.Data.Mapping.Update.Internal.UpdateTranslator.ValidateGraphPostSort(UpdateCommandOrderer orderer)
場所 System.Data.Mapping.Update.Internal.UpdateTranslator.ProduceCommands()
場所 System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager, IEntityAdapter adapter)
場所 System.Data.Objects.ObjectContext.SaveChanges(Boolean acceptChangesDuringSave)
場所 DMM.Service.JobController.AnalyzeReturnMail() 場所 C:\Users\<ユーザー名>\Documents\Visual Studio 2008\Projects\<プロジェクト名>\KAME.Service\JobController.vb:行 604
InnerException:
1つのエンティティに1行だけ追加してるだけなのに・・・。外部キー、アソシエーションは付けてないです。モデル要件とかストア生成・・・?、意味分かんないっす。
このエンティティのINSERTはストアドプロシージャにマッピングしています。そしてストアドからは結果セットを戻し、結果列のバインドでIdentity列をバインドさせてDBで振られた値をエンティティに反映させています。
同様のことをやっているのにエラーが出ていないエンティティもあるので、それと比べてみると・・・
うまくいっている方は、パラメーターにIdentity列をマッピングせず、結果列にだけバインドしてる!
失敗している方のストアドプロシージャ、Identity列用のパラメーター設けていはいるものの、そのパラメーターはINSERTには使用していないんですけどね。
その使っていないパラメーターを削除し、エンティティーでのパラメータのマッピングも削除したところ、エラーは解消されました。
でもこのエラー、実行時ではなくデザイン時にだしてくれてもいいんじゃないでしょうか。