我在尝试将作为外键的实体保存到父对象时遇到问题..
我有一个 amazonProduct 实体。还有一个 AmazonCompetitivePrice 实体,它是 amazonProduct 上的虚拟列表,如下所示:
public class AmazonProduct
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public virtual int ASIN
public virtual IList<AmazonProductCompetitivePrice> amazonProductCompetitivePrices = new List<AmazonProductCompetitivePrice>();
}
所以我有一个从数据库中检索的 AmazonProduct,然后将一个新的 AmazonProductCompetitivePrice 添加到 amazonProduct。
但是当我尝试保存时,我收到以下错误:
违反主键约束“PK_dbo.AmazonProducts”。无法在对象“dbo.AmazonProducts”中插入重复键。\r\n语句已终止
看起来它没有意识到我的 AmazonProduct 已经在数据库中,并且它试图保存一个新的但主键已经存在!
我使用 fluent 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;
}
}
这就是一切..感谢您的帮助!