我有這個測試在我的測試基地:爲什麼AutoMapper/EF添加新項目而不是關係?
public void WorksWithAreaUsers()
{
using (new TransactionScope())
{
//arrange
var userBusiness = new UserBusiness();
var user = new User
{
Name = "TestUser###",
Login = "domain\test-user###"
};
userBusiness.Add(user);
var areaBusiness = new AreaBusiness();
var area = new Area
{
Name = "TestArea###",
Description = "Test Area Description",
Users = new List<User> { user }
};
//act
areaBusiness.Add(area);
//assert
var areaFromDb = areaBusiness.FindById(area.AreaID);
Assert.IsNotNull(areaFromDb.Users);
Assert.IsTrue(areaFromDb.Users.Count > 0);
Assert.IsTrue(areaFromDb.Users.Any(c => c.UserID == user.UserID));
}
}
它是做什麼:
- 插入一個新用戶的基礎;
- 插入一個新的區域與用戶關係的基地,
實際發生的:
- 新用戶插入;
- 插入新區域;
- 重新插入新用戶,並有區域關係;
會發生什麼?
的更多信息:
- 區域和用戶不EntityObjects真的。我使用AutoMapper映射DTO/Entity,我認爲問題在於這個邏輯。在某個時刻,我必須在List和EntityCollection之間進行映射。我創建一個新的EntityCollection,並使用EntityCollection.Add方法將用戶轉換爲此集合中的UserEntity。我想我應該使用Attach來創建一個新的實體,但是如果沒有正確的綁定,從一個EntityCollection調用這個方法是行不通的。
您是否建議任何比這更聰明的解決方案或解決此問題的解決方法?我真的需要項目層(Web - > Business - > Data - > EF),因爲模塊化原因,asp.net直接與EF一起工作是我們不能在這裏完成的。
編輯:
我放棄了使用AutoMapper做這個工作的念頭= /我沒有很多的實體,並改變我需要在這個圖書館工作要做,以便上班需要一些努力,這不是一件小事。我自己做映射比較好。
這是一個多對多的關係。它會改變什麼嗎? – 2009-08-12 14:47:45
在這種情況下,請嘗試執行Users.Add(user)或user.Areas.Add(Area)類型的邏輯。 – 2009-08-12 15:52:22