[更新] L2Eはあなたがメインのオブジェクトを保存することができます前に、最初にリンクされているすべてのオブジェクトを保存する必要が使用されているので
。これは、そうでなければ、私の例では、連絡先オブジェクトなしでアーティストを作成することになります。これは、データベース設計では許可されていません。
[/更新]
私の実装はうまくいきました。
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create([Bind(Exclude = "Id")] Artist artist, [Bind(Prefix = "Contact")] Contact contact, [Bind(Prefix = "Country")] Country country, [Bind(Prefix = "ContactRelationship")] ContactRelationship contactRelationship)
{
ViewData["Countries"] = new SelectList(new CountryService(_msw).ListCountries().OrderBy(c => c.Name), "ID", "Name");
ViewData["ContactRelationships"] = new SelectList(new ContactRelationshipService(_msw).ListContactRelationships().OrderBy(c => c.ID), "ID", "Description");
country = _countryService.GetCountryById(country.ID);
contact.Country = country;
contactRelationship = _contactRelationshipService.GetContactRelationship(contactRelationship.ID);
contact.ContactRelationship = contactRelationship;
if(_contactService.CreateContact(contact)){
artist.Contact = contact;
if (_service.CreateArtist(artist))
return RedirectToAction("Index");
}
return View("Create");
}
そして、私のContactRepositoryに:
public Contact CreateContact(Contact contact)
{
_entities.AddToContact(contact); //no longer throws the exception
_entities.SaveChanges();
return contact ;
}
私も、それは私が今のところ特別なデータクラスを使用していますので、アプリケーション全体で同じコンテキストを維持するために最善であることをこのウェブサイト上で見つけますこれは
です。Rick StrahlとSamuel Maechamは、リクエストごとにユーザーごとにデータコンテキストを保持する必要があることを教えてくれました。これは、WebアプリケーションのHttpContextにそれを置くことを意味します。 は、誰かが私の解決策をご確認正気を喜ばせることができるかどううーん、私は疑問に思うそれについてのすべてをhere
public class Data
{
public static MyDBEntities MyDBEntities
{
get
{
if (HttpContext.Current != null && HttpContext.Current["myDBEntities"] == null)
{
HttpContext.Current["myDBEntities"] = new MyDBEntities();
}
return HttpContext.Current["myDBEntities"] as MyDBEntities;
}
set {
if(HttpContext.Current != null)
HttpContext.Current["myDBEntities"] = value;
}
}
}
Peterさん、ありがとうございました。同じソリューションを探すために1時間ほど費やしています。再度ありがとう – Geo