Нарушение первичного ключа, пытается вставить таблицу внешнего ключа - PullRequest
1 голос
/ 30 марта 2020

Я пытаюсь добавить новую запись в таблицу правил. Вставляя таблицу правил, я получаю ошибку, как будто она пытается вставить ее в реляционную таблицу. Я делаю подобные вещи вставки раньше, но у меня никогда не было этой ошибки. Я также искал и попробовал предложение других пользователей, но у меня не получилось.

 public class RuleDomainModel
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]//tried
    public int ObjectID { get; set; }
    public string Name { get; set; }
    //[Key] //tried
    public int? BranchID { get; set; }

    [ForeignKey("BranchID")]//tried
    public virtual BranchDomainModel Branch { get; set; }
}

public class BranchDomainModel : BaseModel
{
    [Required]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]//tried
    [Key]
    public int ObjectID { get; set; }
    public string Name { get; set; }
    public virtual ICollection<UnitDomainModel> Units { get; set; }
    [ForeignKey("BranchID")]//tried
    public virtual ICollection<RuleDomainModel> Rules { get; set; }
}

Отображения, подобные;

public void OnModelCreating(ModelBuilder builder)
    {
        builder.Entity<RuleDomainModel>().ToTable("Rules");
        builder.Entity<RuleDomainModel>().HasKey(t => t.ObjectID);
        builder.Entity<RuleDomainModel>().Property(t =>t.Name);
        builder.Entity<RuleDomainModel>().HasOne(t => t.Branch).WithMany(t => t.Rules).HasForeignKey(t => t.BranchID).HasPrincipalKey(t => t.ObjectID);
    }

 public void OnModelCreating(ModelBuilder builder)
    {
        builder.Entity<BranchDomainModel>().ToTable("Branch");
        builder.Entity<BranchDomainModel>().HasKey(t => t.ObjectID);
        builder.Entity<BranchDomainModel>().Property(t => t.Name);
        builder.Entity<BranchDomainModel>().HasMany(m => m.Units).WithOne(x => x.Branch).HasForeignKey(x => x.xxxID).HasPrincipalKey(m => m.ObjectID);
    }

И это то, что вызывает исключение:

if (model.ObjectID == 0)
{
    RuleDomainModel mod = Mapper.Map<RuleDomainModel>(model);
    uow.Repository<RuleDomainModel>().Add(mod);
    uow.Commit(requestOwnerModel); // Cannot insert duplicate key error
}
else
 {
    var mod = Mapper.Map<RuleDomainModel>(model);
    uow.Repository<RuleDomainModel>().Update(mod);
    uow.Commit(requestOwnerModel);
 }

Надеюсь, кто-нибудь поможет, спасибо

1 Ответ

0 голосов
/ 31 марта 2020

Я исправил свою проблему, добавив model.Branch = null после сопоставления с моделью домена. Но я не знаю, что это лучший способ. Если кто-нибудь знает, пожалуйста, напишите здесь. Благодаря.

...