У меня есть вопрос относительно обновления существующих пользователей новыми данными с использованием EntityFramework и Domain Models. Или на самом деле больше похоже на проблему.EntityFramework не сохраняет новые данные об объекте
При добавлении нового Поручения Пользователя, после преобразования указанного Order
к OrderEntity
затем добавить его к UserEntity
и сохраняющемуся его в базу данных, данный заказ не сохраняются.
Так мы имеем IUserModel
здесь:
public interface IUser
{
int ID { get; }
List<IOrder> Orders { get; }
}
И сущность UserEntity
здесь:
public class UserEntity
{
int ID { get; set; }
public List<OrderEntity> Orders { get; set; }
}
Мы услуга называется PersistenceService
здесь:
public async Task<bool> UpdateInformation(IUser user)
{
using (var databaseContext = new DatabaseContext())
{
var userEntity = await database.Users.Include(u => u.Orders)
.FirstOrDefaultAsync(x => x.ID == user.ID);
userEntity.Orders = user.Orders.ToEntity(); // Extension (convert to entity)
databaseContext.Entry(userEntity).State
= EntityState.Modified; // Do we need this?
databaseContext.Entry(userEntity.Orders).State
= EntityState.Modified; // Do we need this?
await databaseContext.SaveChangesAsync();
}
}
таблиц в базе данных выглядят так:
Orders User
-------- --------
int ID int ID
Money Price
int UserId -- foreign key to user that owns this order
Edit: В какой-то момент, когда пользователь хочет создать заказ, мы называем это сделать:
public async void AddNewOrder(IOrder order)
{
IUser user = GetActiveUser(); // This just return an IUser
var persistenceService = GetPersistenceService(); // returns instance of persistence service
user.Orders.Add(order);
await persistenceService.UpdateInformation(user);
}
Редактировать 09-11-2016: После дополнительной отладки, это выглядит как линия:
await persistenceService.UpdateInformation(user);
Никогда не возвращается, это не изменяется при изменении кода для запуска синхронизации тоже. Так что это не проблема с резьбой.
Как вы называете этот метод? Вам нужно предоставить время для SaveChangesAsync для работы. Вы пробовали UpdateInformation(). GetAwaiter(). GetResult()? –
Как сказал DavidG, вы просто обновляете заказ, не связывая его с пользователем. –
Хорошо, поэтому я сделал редактирование, чтобы показать, как заказ добавлен пользователю, а также @RicardoPeres не помогает, проблема не решена путем выполнения синхронной работы. – Nicholas