回答

收藏

实体框架6多对多要插入重复的行

技术问答 技术问答 223 人阅读 | 0 人回复 | 2023-09-12

不应该那么难!我要放弃EF …. n' }* x0 v. w1 y$ d
我的模特有每周的报纸版本。每个版本可以分为许多类别。每个类别可以出现在一个或多个版本中。我的模:
; T3 h- A# V! V( upublic class Classifieds{   [Key,DatabaseGenerated(DatabaseGeneratedOption.Identity)]  public int ClassifiedId { get; set; }  ...  public virtual ICollection Editions { get; set; }}public class EditionModel{  [Key,DatabaseGenerated(DatabaseGeneratedOption.None)]  public int EditionId { get; set;   // This is YYYYWW,WW = week number  public Date PublicationDate { get; set; }  public virtual ICollection Classifieds { get; set; }}OnModelCreating重写:
& X4 Q# Q0 j/ o# Hprotected override void OnModelCreating(DbModelBuilder modelBuilder){   modelBuilder.Entity()      .Property(z => z.EditionId)     .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);   modelBuilder.Entity()      .HasMany(c => c.Classifieds)     .WithMany(d => d.Editions)     .Map(x =>                                                                                                                                                                                                                                  x.MapLeftKey("EditionId");       x.MapRightKey("ClassifiedId");       x.ToTable("EditionModelClassifieds");     }base.OnModelCreating(modelBuilder);}创建分类动作代码(HTTP放置):
% [( }2 d  j, \  \2 I5 V6 [public async Task Create(Classifieds classifieds,int[] EditionList){  var allPubs = PopulateEditionList(); // Current and next 12 editions  db.Set().Attach(classifieds);  db.Entry(classifieds).Collection(x => x.Editions).Load();  foreach (var p in EditionList) {        var anEd = (from x in allPubs where x.EditionId == p select x).Single();        classifieds.Editions.Add(anEd);  }  ...  if (ModelState.IsValid) {       var ads = db.Classifieds.Add(classifieds);     await db.SaveChangesAsync().ConfigureAwait(false);     return View("Receipt",classifieds);  }  ...}提交新的分类广告后,我得到了
; t2 W. ~, R8 B# t8 vViolation of PRIMARY KEY constraint 'PK_dbo.EditionModels'.  Cannot insert duplicate key in object 'dbo.EditionModels'.为什么EF坚持要在EditionModels将重复的行插入其中,而不仅仅是将连接到其中的现有行?我该怎么解决?# w' f( C( V8 f7 a: T9 B% g
                                                                6 f, G6 u$ a2 ^
    解决方案:
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则