Im очень близко к слезам на этом.Entity Framework не сохраняет все изменения
У меня есть пользовательский объект Этот объект имеет несколько свойств FirstName, LastName и т. Д. Все простые типы. String int и т. Д.
Они загружаются и обновляются отлично.
public class Jobwalker
{
[Key]
public Int64 ID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
public bool Suspended { get; set; }
public TelephoneCountryCode TelephoneCountryCodeObject { get; set; }
...
Но userobject также имеет свойство «TelephoneCountryCodeObject», который является еще один класс
public class TelephoneCountryCode
{
[Key]
public Guid ID { get; set; }
public string Code { get; set; }
public string Country { get; set; }
public TelephoneCountryCode()
{
}
...
Я могу создать удалить dmodify «TelephoneCountryCode'-объекты просто отлично, , но когда я пытаюсь сохранить экземпляр объекта-пользователя обновляется только простые типы?
public void Save()
{
try
{
using (var db = new MainContext())
{
db.TelephoneCountryCodes.Attach(TelephoneCountryCodeObject);
Jobwalker result = (from jw in db.Jobwalkers
.Include("TelephoneCountryCodeObject")
where jw.UmbracoMemberID == UmbracoMemberID
select jw).FirstOrDefault();
db.Entry(result).CurrentValues.SetValues(this);
if (this.TelephoneCountryCodeObject != null)
{
result.TelephoneCountryCodeObject = db.TelephoneCountryCodes.Find(this.TelephoneCountryCodeObject.ID);
}
else
{
result.TelephoneCountryCodeObject = null;
}
db.Entry(result).State = EntityState.Modified;
db.SaveChanges();
}
}
catch(Exception ex)
{
throw;
}
}
Любые идеи были бы весьма признательны!
EDIT: Я создал этот супер простой метод испытания
public static void TEST()
{
try
{
using (var db = new MainContext())
{
Jobwalker result = (from jw in db.Jobwalkers
.Include("TelephoneCountryCodeObject")
where jw.UmbracoMemberID == 1184
select jw).FirstOrDefault();
result.TelephoneCountryCodeObject = TelephoneCountryCode.GetByName("denmark");
db.TelephoneCountryCodes.Attach(result.TelephoneCountryCodeObject);
result.FirstName = "Flemming";
db.SaveChanges();
}
}
catch (Exception ex)
{
throw;
}
}
Это работает как предполагается. Тогда почему * * не работает мой обычный метод Save()?
В качестве примечания стороны 'use' неявно использует блок' try' для защиты от исключений, поэтому вам не нужно обертывать его в тихий try catch. –
Результат Jobwalker = (from jw in db.Jobwalkers . Включить («PhoneCountryCodeObject») где jw.UmbracoMemberID == UmbracoMemberID select jw) .FirstOrDefault(); Вы уверены, что получили правильные данные? –
@Goran Štuc Да, я получаю правильный пользователь. Когда я пытаюсь установить как FirstName, так и PhoneCountryCodeObject, FirstName будет обновляться, но PhoneCountryCodeObject остается null ... – FlyingHippo