1
我是使用實體框架的新手,我們正在嘗試將我們的應用程序與首先使用EF6模型的體系結構進行匹配。 我有一個這樣的類(我已經簡化了代碼,以更好地解釋):EF 6嘗試插入對象兩次
class Country
{
int CountryId (identity column) { get; set; }
string Name { get; set; }
ICollection<Child> Regions { get; set; }
}
class Region
{
int RegionId (identity column) { get; set; }
string Name { get; set; }
int CountryId { get ; set; } //foreign key to Country(CountryId)
}
在我們初始化應用業務層對象地區那樣:
public Region Create()
{
Provincia Region = new Region();
provincia.Country = CountryDAL.GetByCode("ES");
provincia.CountryId = Region.Country.CountryId ;
return Region ;
}
CountryDAL是從數據庫加載國家的圖層。 當我嘗試保存更改時,我從數據庫中獲得一個唯一的禁忌異常,因爲EF嘗試插入國家兩次。我不明白爲什麼
this.context.Entry(entity).State = Data.Entity.EntityState.Added;
entity.AcceptChanges(user);
int Result = this.context.SaveChanges();
我只想用自己的財產CountryId充滿拯救實體地區,我不想給國家保存爲一個新的對象。 但是,在其他視圖中,我應該能夠創建一個國家並將其國家保存爲孩子(但這是我已解決的另一個問題)。
非常感謝
如果你想保存它,你需要將它添加到上下文嗎?你可以保存它(如果它被連接)或者將它附加到一個不跟蹤它的上下文中? – Deniz
謝謝你的回答。我不明白這一點。你能解釋一下嗎?你是否引用了「this.context.Entry(entity).State = Data.Entity.EntityState.Added;」 – Jsanchez
是的。我不是EF的專家,但如果你想保存一個實體,你必須附加它(如果還沒有的話),或者直接調用'SaveChanges()'。 'Add()'更像是DB中的INSERT。如果它在你的數據庫中是eaxist,但不是你的上下文,那麼調用Add()並不會損害你的上下文,但是將一個現有的項插入到你的數據庫中是一個錯誤。我使用'Add()'和'Data.Entity.EntityState.Added:'傳遞。 – Deniz