- 負載一些實體到內存中,
- 變化的接其「標」
- 屬性值的-without觸摸它的導航屬性。和
將它們作爲新實體保存到Db中。
如何在EntityFramework中實現這一點,是否足以將對象的ID設置爲NULL以將其保存爲新的實體或應該是什麼訣竅?
回答
根據你如何使用實體框架,我相信你可以分離和附加你的實體,改變標量值(包括ID)並將其標記爲「已添加」。您可能仍然需要連接/添加外國實體。看到這個頁面多一點信息是什麼我談論:
我曾在一個項目中,實體必須是唯一的和變化的實體將產生一個新的實體,這同樣的困難。我在實體類中創建了一個Clone方法,它接受實體並返回相同的類型。它創建一個新實例,複製所有相關屬性,然後返回新實體。
爲了更進一步,您可能會創建一個具有Clone方法的基類,該方法使用反射來複制屬性值並讓您的實體繼承它。
您只需將entity state從修改更改爲已添加,實體框架將執行插入而不是更新。
例使用的DbContext API:
DbContext context = // ...
foreach (var entityEntry in context.ChangeTracker.Entries())
{
if (entityEntry.State == EntityState.Modified)
entityEntry.State = EntityState.Added;
}
ct.SaveChanges();
當狀態改變時,實體實體的EntityKey會發生什麼?保持原樣並在SaveChanges()上被忽略並表現爲尚未設置? – pencilCake
你可以克隆與Automapper對象,修改幾個屬性和它保存爲一個新的實體。
例如:
//Get the source object from a fictitious repository
Person source = PersonRepository.GetPersonByID(555);
//Create an AutoMapper Mapper
Mapper.CreateMap<Person, Person>();
//If you want to ignore the primary key of the original object, use something like this:
//Mapper.CreateMap<Person, Person>().ForMember(x => x.PersonID, y => y.Ignore());
//Clone your source person
var clone = Mapper.Map<Person>(source);
//Set some property
clone.SomeProperty = 123;
//Save our clone against the fictional repository
PersonRepository.Save(clone);
//You could also return your clone at this point...
我用這種方法前些天克隆記錄。你可以做的一件事就是確定來源,例如source.PersonID
,並將其與clone.ParentID
對應,以便您可以找到克隆的起源(如果需要,您可以繼續並選擇外鍵)。
源/推薦閱讀 - Copy object to object (with Automapper ?)
如果需要,您還可以映射到一個新的實體類型 - 看到Automapper維基 - https://github.com/AutoMapper/AutoMapper/wiki/Getting-started
然後,Jimmy Bogard(Automapper的作者)說,它不適合克隆! http://stackoverflow.com/q/5713556/201648 –
- 1. 實體框架 - 如何爲實體類創建基類?
- 2. 實體框架創建重複實體
- 3. 實體框架4.0。實體創建
- 4. 爲實體框架中的實體創建基類
- 5. 更新實體框架中的實體
- 6. 如何在實體框架中創建只讀實體?
- 7. 實體框架添加新的實體
- 8. 實體框架:使用關係添加實體,創建新實體
- 9. 實體框架:實體
- 10. 實體框架實體
- 11. 實體框架實體json
- 12. 實體框架5:創建
- 13. 實體框架插入新實體
- 14. 實體框架更新實體錯誤
- 15. 更新子實體實體框架
- 16. 實體框架更新相關實體
- 17. 實體框架和MySql更新實體
- 18. 實體框架:更新相關實體
- 19. 實體框架更新導航實體
- 20. 實體框架更新實體?
- 21. 實體框架:更新實體時更新另一個實體
- 22. ADO.NET實體框架 - 輕鬆重新創建實體類?
- 23. 實體框架複雜類型vs創建新實體
- 24. 實體框架 - 如何通過實體
- 25. 實體框架:如何在實體
- 26. 如何從實體框架實體(對象)創建列表?
- 27. 實體框架創建最新的IQueryable
- 28. 實體框架 - 如何創建沒有泛型的基礎實體
- 29. 如何在實體框架中映射基本實體屬性?
- 30. CoreData:創建一個新實體作爲舊實體的父代
這是與數據庫生成的主鍵? –