Я переношу данные между каркасом сущности и бизнес-уровнем и пользовательским уровнем с помощью объектов передачи данных. У меня есть некоторые сомнения, если я получаю объект, который преобразован в DTO, как я могу обновить правильный объект в структуре сущности, а не просто вставить дубликат?Объекты инфраструктуры сущности объекта
24
A
ответ
2
Вам необходимо будет включить первичный или альтернативный ключ в DTO, а затем сопоставить этот ключ с правильным EF-объектом после обновления.
7
старый вопрос, но только в том случае, если кто нужен код решение:
Пример:
public void EditArticle(
Article article, string articleTypeId, string[] categoryId)
{
var id = 0;
Article art = de.ArticleSet
.Include("ArticleTypes")
.Include("Categories")
.Where(a => a.ArticleID == article.ArticleID)
.First();
var count = art.Categories.Count;
for (var i = 0; i < count; i++)
{
art.Categories.Remove(art.Categories.ElementAt(i));
count--;
}
foreach (var c in categoryId)
{
id = int.Parse(c);
Category category = de.CategorySet
.Where(ct => ct.CategoryID == id).First();
art.Categories.Add(category);
}
art.Headline = article.Headline;
art.Abstract = article.Abstract;
art.Maintext = article.Maintext;
art.DateAmended = DateTime.Now;
art.ArticleTypesReference.EntityKey = new EntityKey(
"DotnettingEntities.ArticleTypeSet",
"ArticleTypeID",
int.Parse(articleTypeId)
);
de.SaveChanges();
}
28
Следующий код будет обновлять EF 4 сущность, которая была создана в параметр контроллера в MVC из строго типизированного вида:
Кажется, что использование ObjectStateManager для изменения состояния f rom Добавлен в Модифицированный, как только объект был добавлен в контекст.
MyEntities db = new MyEntities();
db.Product.AddObject(product);
db.ObjectStateManager.ChangeObjectState(product, System.Data.EntityState.Modified);
return db.SaveChanges() > 0;
По @Sean Миллс комментарий, если вы используете использовать Ef5:
((IObjectContextAdapter) db).ObjectContext.ObjectStateManager.ChangeObjectState(entity, System.Data.EntityState.Added);
4
//I am replacing player :)
public ActionResult ProductEdit(string Id, Product product)
{
int IdInt = DecyrptParameter(Id);
MyEntities db = new MyEntities();
var productToDetach = db.Products.FirstOrDefault(p=> p.Id == IdInt);
if (product == null)
throw new Exception("Product already deleted"); //I check if exists, maybe additional check if authorised to edit
db.Detach(productToDetach);
db.AttachTo("Products", product);
db.ObjectStateManager.ChangeObjectState(product, System.Data.EntityState.Modified);
db.SaveChanges();
ViewData["Result"] = 1; // successful result
return View();
}
2
Это должно работать для EF 5: https://stackoverflow.com/a/11749716/540802:
db.Entry(product).State = EntityState.Modified;
Смежные вопросы
- 1. Аудит инфраструктуры сущности
- 2. Добавление объекта в контекст инфраструктуры сущности занимает около 1,5 секунд
- 3. Symfony 2, объекты сущности объекта в Javascript
- 4. Объекты, удаляющие структуру сущности
- 5. Database.SqlQuery -> Объекты инфраструктуры Entity
- 6. Необходимость отделить бизнес-объекты от объектов инфраструктуры объекта (POCOs)?
- 7. Поставщик инфраструктуры сущности .NET базы данных
- 8. Объекты сущности и сеансы NHibernate
- 9. Выберите из объекта инфраструктуры вложенного объекта
- 10. Должны ли бизнес-объекты или сущности самообслуживаться?
- 11. Может ли сущность быть выгружена из ObjectStateManager инфраструктуры сущности?
- 12. Объекты сущности как объекты передачи данных
- 13. Кэширование linq 2 объекта сущности и связанные с ними объекты
- 14. Внедрение инфраструктуры с ограниченным контекстом в инфраструктуру на основе сущности
- 15. Объекты структуры сущности для json
- 16. Где я должен создавать объекты сущности?
- 17. Изменение обновления инфраструктуры сущностей
- 18. Лучший учебник по использованию инфраструктуры сущности, POCO и MySQL
- 19. Включить свойства стороны сервера, не привязанные к объекту инфраструктуры сущности
- 20. База данных LocalDB на лету для кода инфраструктуры сущности первая
- 21. Не удается найти объекты, которые ссылаются на объект сущности сущности
- 22. Как создать объекты инфраструктуры Entity в веб-API?
- 23. Неизвестная ошибка сущности объекта
- 24. Сбой приложения инфраструктуры объекта в другой системе,
- 25. Как загрузить определенные объекты в инфраструктуре сущности
- 26. Объекты спящего режима: столбцы без свойств объекта
- 27. JPA Ошибка выдачи объекта сущности
- 28. Ошибка избыточной связи сущности объекта
- 29. удаления объекта в рамках сущности
- 30. JPA получить идентификатор объекта сущности
Наконец! Я потратил столько времени на другие обходные пути - это работает потрясающе, без необходимости делать dbObject.Property = receivedObject.Property для каждого свойства при обновлении. – kape123
, если ObjectStateManager не является свойством вашего контекста try ((System.Data.Entity.Infrastructure.IObjectContextAdapter) db) .ObjectContext http://stackoverflow.com/a/8968643/678338 –