Одна и та же сущность, указанная в другой сущности дважды, создает проблему при сохранении родителя с детьми - PullRequest
0 голосов
/ 25 сентября 2018

У меня модель данных выглядит следующим образом.

class KnowledgeDocument
{
   public int? Id {get; set;}
   public virtual ICollection<KDValueCreation> KDValueCreations { get; set; }
}

class KDValueCreation
{
    public int? Id{get; set;}
    public int? KDReferenceId { get; set; }
    public virtual KnowledgeDocument KDReference { get; set; }
    public int KnowledgeDocumentId { get; set; }
    public virtual KnowledgeDocument KnowledgeDocument { get; set; }
    public decimal Amount {get; set;}
}

Теперь, когда я пытаюсь создать новый KnowledgeDocument вместе с KDValueCreations следующим образом.

KnowledgeDocument kd = new KnowledgeDocument();

kd.KDValueCreations.Add(new KDValueCreation{ Amount = "500000"});

Когда я сохраняю kd, kd сохраняется без каких-либо проблем, и в KDValueCreation создается 1 запись, и KDReferenceId и KnowledgeDocumentId заполняются одним и тем же kdId.Но я хочу заполнить только KnowledgeDocumentId и остановить заполнение KDReferenceId и установить для него значение null.

Поскольку оба поля указывают на одну и ту же ссылку, платформа Entity заполняет Id в обоих полях.

Как мне достичь этого, сохранив документ KnowledgeDocument со своими детьми?

Пожалуйста, предложите.Заранее спасибо.

1 Ответ

0 голосов
/ 25 сентября 2018

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

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    // configures one-to-many relationship
    modelBuilder.Entity<KDValueCreation>()
        .HasRequired<KnowledgeDocument>(c => c.KnowledgeDocument)
        .WithMany(d => d.KDValueCreations)
        .HasForeignKey(c => c.KnowledgeDocumentId);
      }
}

или по этому:

modelBuilder.Entity<KnowledgeDocument>()
    .HasMany<KDValueCreation>(d => d.KDValueCreations)
    .WithRequired(c => c.KnowledgeDocument)
    .HasForeignKey(c => c.KnowledgeDocumentId);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...