重複鍵我有一個問題,試圖挽救這是一個外鍵的父對象的實體..違反PRIMARY KEY約束'PK_dbo.AmazonProducts'。不能插入對象
我有一個amazonProduct實體。而這是對amazonProduct像這樣一個虛擬的列表中AmazonCompetitivePrice實體:
public class AmazonProduct
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public virtual int ASIN
public virtual IList<AmazonProductCompetitivePrice> amazonProductCompetitivePrices = new List<AmazonProductCompetitivePrice>();
}
所以我有一個AmazonProduct這是我從數據庫中檢索,然後添加一個新的AmazonProductCompetitivePrice到amazonProduct。
但是當我試圖挽救這個,我得到以下錯誤:
Violation of PRIMARY KEY constraint 'PK_dbo.AmazonProducts'. Cannot insert duplicate key in object 'dbo.AmazonProducts'.\r\nThe statement has been terminated
它看起來像它沒有意識到,我的AmazonProduct是已經在數據庫中,它試圖挽救一個新的,但主鍵已經存在!
我用流利的API映射外鍵,像這樣:
modelBuilder.Entity<AmazonProduct>()
.HasMany(pl => pl.AmazonProductCompetitivePrices)
.WithOptional(p => p.AmazonProduct)
.Map(c => c.MapKey("ASIN"));
任何人都知道什麼是問題呢?
在此先感謝!
編輯: 對象檢索:
using (var uow = new UnitOfWorkInventory())
{
using (var amazRepo = new AmazonProductRepository(uow))
{
return amazRepo.FindByAsin(ASIN);
}
}
public AmazonProduct FindByAsin(string asin)
{
return context.AmazonProducts.Include(x => x.AmazonLowestOfferListings).Include(x => x.AmazonMyPrices).Include(x => x.AmazonProductCompetitivePrices).SingleOrDefault(x => x.ASIN == asin);
}
這讓我的AmazonProduct ..然後保存:
using (var uow = new UnitOfWorkInventory())
{
using (var amazonRepo = new AmazonProductCompetitivePriceRepository(uow))
{
amazonProductCompetitivePrice.AmazonProduct = amazonProduct;
amazonRepo.InsertOrUpdate(amazonProductCompetitivePrice);
}
uow.Commit();
}
public void InsertOrUpdate(AmazonProductCompetitivePrice amazonProductCompetitivePrice)
{
if (amazonProductCompetitivePrice.Id == default(int))
{
// New entity
context.AmazonProductCompetitivePrices.Add(amazonProductCompetitivePrice);
}
else
{
// Existing entity
context.Entry(amazonProductCompetitivePrice).State = EntityState.Modified;
}
}
那一切..並感謝您的幫助!
如何保存實體? – ysrb 2013-04-26 13:27:58
聽起來像你知道確切的問題 - 你不能保存它的項目已經存在,你必須修改現有的項目。爲了修改一個項目,你需要「自定義」代碼,或者你必須讀入原始實體並在框架保存之前修改它。 – Hogan 2013-04-26 13:29:13
請顯示完整的代碼示例:檢索,更新和更改保存。 – Dennis 2013-04-26 13:31:33