1
我正在使用EF4。我從DTO列表中添加了一系列新實體,並且在添加完所有這些實體之後才保存更改。我想將DTO的ID設置爲新實體的ID。我到底怎麼做到這一點? EF是否爲此提供了一種機制?如何在插入多個新實體時更新我的DTO ID
用一個單一的實體,我會做這樣的:
public void InsertMyDto(MyDto a_dto)
{
var newEntity = new MyEntity
{
Name = a_dto.Name,
Type = a_dto.Type.ToString(),
Price = a_dto.Price
};
_dataContext.MyEntities.AddObject(newEntity);
_dataContext.SaveChanges();
a_dto.ID = newEntity.ID;
}
這工作得很好,但我該怎麼辦在這種情況下?
public void InsertMyDtos(IEnumerable<MyDto> a_dtos)
{
foreach (var myDto in a_dtos)
{
var newEntity = new MyEntity
{
Name = myDto.Name,
Type = myDto.Type.ToString(),
Price = myDto.Price
};
// Does some validation logic against the database that might fail.
_dataContext.MyEntities.AddObject(newEntity);
}
_dataContext.SaveChanges();
// ???
}
是針對數據庫進行,它得到
SaveChanges
之前失敗,如果失敗,我希望它失敗作爲
我想保存一次全部,因爲我有驗證工作(上面沒有顯示)整個交易(即回滾)。
這導致我有進一步的問題。顯然,在DTO上設置ID對客戶端沒有影響?現在它沒有意義。我的DTO代表一個默認實體和一個新創建的自定義實體。它擁有兩個鍵。所以它在創建實體之前存在於客戶端上。在這種情況下,在服務器上對DTO進行的更改不會反映在客戶端上。雖然他們是我單獨插入的時候。無論如何,你是對的。 **嘆** – Jordan 2012-03-19 14:42:28