违反PRIMARY KEY约束’PK_dbo.AmazonProducts’。 无法在对象中插入重复键
我在尝试保存作为父对象的外键的实体时遇到问题。
我有一个amazonProduct实体。 还有一个AmazonCompetitivePrice实体,它是amazonProduct上的虚拟列表,如下所示:
public class AmazonProduct { [Key] [DatabaseGenerated(DatabaseGeneratedOption.None)] public virtual int ASIN public virtual IList amazonProductCompetitivePrices = new List(); }
所以我有一个从数据库中检索的AmazonProduct,然后将新的AmazonProductCompetitivePrice添加到amazonProduct。
但是当我尝试保存时,我收到以下错误:
违反PRIMARY KEY约束’PK_dbo.AmazonProducts’。 无法在对象’dbo.AmazonProducts’中插入重复键。 r n语句已终止
看起来它没有意识到我的AmazonProduct已经存在于数据库中,它试图保存一个新的,但主键已经存在!
我使用流畅的API来映射外键,如下所示:
modelBuilder.Entity() .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; } }
多数民众赞成…并感谢您的帮助!!
这一行:
amazonProductCompetitivePrice.AmazonProduct = amazonProduct;
隐式地将 amazonProduct
实例添加到上下文中。 因为该实例是使用不同的上下文实例检索的,所以当前实例认为它是新的AmazonProduct
。 你应该附上它,如下所示:
if (amazonProductCompetitivePrice.AmazonProduct != null && amazonProductCompetitivePrice.AmazonProduct.Id != 0) { context.Entry(amazonProductCompetitivePrice.AmazonProduct).State = EntityState.Unchanged; }
另一种方法:您只能为amazonProductCompetitivePrice
而不是navigation属性设置外键属性。
我有这个问题首先我删除了
[DatabaseGenerated(DatabaseGeneratedOption.None)]
来自我的实体类的注释。 然后,我手动从我的sql server中删除了表,并在NuGet
包管理器控制台中再次使用了update-database -Verbose
。 现在,它的作品!
上述就是C#学习教程:违反PRIMARY KEY约束’PK_dbo.AmazonProducts’。 无法在对象中插入重复键分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1010781.html