c# – EF7(Core)中同一个表的多个关系
发布时间:2020-12-15 08:16:26 所属栏目:百科 来源:网络整理
导读:我有这样的模特 public class Question{ public string Id { get; set; } = Guid.NewGuid().ToString(); public Answer Answer { get; set; } public ListVariant Variants { get; set; } public string CorrectVariantId { get; set; } public Variant Corr
我有这样的模特
public class Question { public string Id { get; set; } = Guid.NewGuid().ToString(); public Answer Answer { get; set; } public List<Variant> Variants { get; set; } public string CorrectVariantId { get; set; } public Variant CorrectVariant { get; set; } } public class Variant { public string Id { get; set; } = Guid.NewGuid().ToString(); public string QuestionId { get; set; } public Question Question { get; set; } } // mapping modelBuilder.Entity<Question>() .HasOne(q => q.CorrectVariant) .WithOne(v => v.Question) .HasForeignKey<Question>(q => q.CorrectVariantId); modelBuilder.Entity<Variant>() .HasOne(v => v.Question) .WithMany(a => a.Variants) .OnDelete(DeleteBehavior.Cascade); 在从EF RC1升级到RTM之前,这种方法非常有效.但现在它抛出: 如果没有从Question模型中删除Variants属性,是否有解决此问题的方法? 解决方法
这是RC1中的一个错误/不受欢迎的行为,它已得到修复.
你应该创建另一个属性,比如说另一个关系的SecondQuestion. public class Question { public string Id { get; set; } = Guid.NewGuid().ToString(); public List<Variant> Variants { get; set; } public string CorrectVariantId { get; set; } public Variant CorrectVariant { get; set; } } public class Variant { public string Id { get; set; } = Guid.NewGuid().ToString(); public string QuestionId { get; set; } public Question Question { get; set; } public Question SecondQuestion { get; set; } } 你的DbContext: protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Question>() .HasOne(q => q.CorrectVariant) .WithOne(v => v.SecondQuestion) .HasForeignKey<Question>(q => q.CorrectVariantId); modelBuilder.Entity<Variant>() .HasOne(v => v.Question) .WithMany(a => a.Variants).HasForeignKey(x => x.QuestionId).OnDelete(DeleteBehavior.SetNull); base.OnModelCreating(modelBuilder); } 如何使用它: using (var myDb = new MyDbContext()) { var variantFirst = new Variant(); var variantSecond = new Variant(); var question = new Question(); variantFirst.Question = question; variantSecond.SecondQuestion = question; myDb.Variants.Add(variantFirst); myDb.Variants.Add(variantSecond); myDb.SaveChanges(); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |