私はいくつかの日から大きな問題を抱えています。私はEntity Frameworkの初心者です。 私はグループとニュースという2つのエンティティを持っています。 1つまたは複数のグループがニュースを見ることができます。私は2つのリポジトリ(newsRepositoryとgroupsRepository)を使用します。「EntityオブジェクトはIEntityChangeTrackerの複数のインスタンスで参照できません」.net MVC2とEntity Framework4
このニュースのための私の作成方法は次のとおりです。
public ActionResult Create()
{
return View(new CreateNewsViewModel(new News()));
}
[HttpPost]
public ActionResult Create(CreateNewsViewModel model)
{
model.news.CategoryId = Int32.Parse(Request.Form["news.CategoryId"]);
if (ModelState.IsValid)
{
News news = new News();
DateTime date = DateTime.Now;
//AuthorId a recuperer
news.AuthorId = 1;
news.Title = IntranetTools.UppercaseFirst(model.news.Title.Trim());
news.Content = model.news.Content;
news.IsVisible = Request.Form["news.IsVisible"].Contains("true");
news.CreateDate = date;
news.PublicationDate = date;
news.LastChangedDate = date;
news.CategoryId = model.news.CategoryId;
// Collection des groupes concernés
foreach (var c in model.allGroups)
{
if (Request.Form["" + c.GroupId].Contains("true"))
{
News.Groups.Add(c);
}
}
_newsRepository.AddToNewsSet(news);
_newsRepository.SaveChanges();
return Redirect("/NewsAdmin/Index/");
}
return View(model);
}
私はすべての私のグループが既に作成されていることを言います。私はちょうど(チェックボックスを介してユーザーによって選択された)グループを挿入したい。私の "CreateNewsViewModel"では、私は自分のDB内の既存のすべてのグループを含むグループのリストを作成します。 "foreach"ループを使ってリストを取得し、各グループのチェックボックスを作成します。
コントローラで同じリストを再利用して、チェックボックスがオンになっているかどうかを比較します。 「真」の値ごとに、作成したばかりのニュースのグループコレクションにグループを追加します。これにより
、私はこのエラーメッセージを取得:
(ラインで_newsRepository.AddToNewsSet(ニュース);)
私がしようと、「エンティティオブジェクトがIEntityChangeTrackerの複数のインスタンスによって参照することはできませんが。」いくつかのソリューションが、私はまだこの問題を解決する方法を理解していない。私は明示的に2つのコンテキストを使用し、他のコンテキストに私のオブジェクトをアタッチ/デタッチ場合は、すべての
編集
ため
おかげで実際に、それは罰金だと私はerrosを持っていません。
ObjectContext context = _newsRepository.Context;
ObjectContext context2 = _groupsRepository.Context;
foreach (var c in groups)
{
if (Request.Form["" + c.GroupId].Contains("true"))
{
context2.Detach(c);
context.Attach(c);
news.Groups.Add(c);
}
}
私が(単一の要求の処理中に)私のリポジトリに同じのObjectContextを与えるために(私はNinjectフレームワークを使用)ラディスラフMrnkaのソリューションを使用し、依存性注入を使用したいと思います。 私はコンセプトを理解していますが、コード化する方法はわかりません。
オハイオ州ok ...実際には、それは..すべてのGroupGroupが私のGroupsRepositoryからロードされています。あなたの最初の解決策は私のために良いようです。私はこれをどうやって実装できるのですか? (私はいくつかの説明を検索しましたが、私にとっては少し曖昧です。) – Areasta
リポジトリにコンストラクタのパラメータとしてObjectContext(またはいくつかのラッパー)がある依存関係注入を使用しています。 –
私にこの例を教えてもらえますか?情報については、Ninjectを使っています。 – Areasta