Опитвам Entity Framework 4.0 и тук е най-опростената версия на случая -
Имам следните две свързани таблици -
Адрес
ID
Град
Клиент
Id
AddressId
Име
Заредих адресите в ComboBox. Всичко, което искам, е да въведа името на клиента в текстовото поле, да избера адрес от разгъващия се списък като адрес на клиента и да натисна бутона Запазване. Искам моят клиент да бъде записан в таблицата Client. Ето какво опитах -
/*loads Addresses to the ComboBox*/
private void LoadData()
{
using (CAEntities ctx = ModelAccess.GetContext())
this.AddressList = ctx.Addresses.ToList();
}
/*(tries) to insert the Client to the database*/
private void Save()
{
/*here this.Client is the Client object that is instantiated & initialized
by previous code and this.Address is the SelectedItem of the ComboBox*/
this.Client.Address = this.Address;
using (CAEntities ctx = ModelAccess.GetContext())
{
ctx.Clients.AddObject(this.Client);
ctx.SaveChanges();
}
}
Джули Лерман в Programming Entity Framework казва, че ...Because the
entities are joined, you can add either entity, and it will bring along the rest of the graph...
Но това, което имам, е InvalidOperationException, което казва "Свойството EntityKey може да бъде зададено само когато текущата стойност на свойството е нула."
Ако използвам -
this.Client.AddressId = this.Address.Id;
вместо -
this.Client.Address = this.Address;
клиентът е вмъкнат перфектно в базата данни. Но мисля, че също така трябва да мога да свързвам обектите директно един с друг, нали?
Предположих, че проблемът е свързан с отделния контекст, който създавам. Така че опитах това -
private void Save()
{
this.Client.Address = this.Address;
using (CAEntities ctx = ModelAccess.GetContext())
{
ctx.Addresses.Attach(this.Address);
ctx.SaveChanges();
}
}
но този път получавам изключение InvalidOperationException, което казва „Обект с временна стойност на EntityKey не може да бъде прикачен към контекст на обект.“ И така, какво правя грешно тук? Благодаря предварително.
SelectedItem
като this.Address и получавам свойствата за идентификатор и град от това. - person atiyar   schedule 31.08.2012SelectedItem
на combobox към този адрес в моя ViewModel. така че когатоSelectedItem
се променя, не трябва ли да получавам адресен обект?SelectedItem
, както е споменато тук msdn.microsoft.com/en-us/library/, връщаSystem.Object
и можете да го преобразувате към персонализирания си обект, прав ли съм? - person atiyar   schedule 31.08.2012