Cześć,
Próbuję zapisać do bazy złożony model składający się z dwóch kluczy obcych:
Poniższy kod czyta pola z formularza i tworzy model danych.
public AccountingDocumentModel Document
{
get
{
return new AccountingDocumentModel()
{
Id = DocumentId,
TypeOfAccountingDocument = cmbRodzajDokumentu.SelectedItem.ToString(),
IdNumber = tbNumer.Text,
KontrahentId = Kontrahent.Id,
OperationDescription = tbOpisOperacji.Text,
OperationValue = Convert.ToDouble(tbWartosc.Text),
OperationDate = Convert.ToDateTime(dpDataOperacji.Text),
SaleRecord = SaleRecords,
KPiREntries = new KPiREntryModel()
{
KPiRId = AppSettings.SelectedKPiR.Id
}
};
}
}
Następnie wywołuje funkcję zapisującą do bazy i wykonuję następujący kod:
public static void SaveDocument(AccountingDocumentModel document)
{
using (var ctx = new LocalSQLContext())
{
if (document.Id != 0)
ctx.AccountingDocuments.Update(document);
else
ctx.AccountingDocuments.Add(document);
ctx.SaveChanges();
}
}
Model wygląda następująco:
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Windows.Documents;
namespace KPiR.Data.Models
{
public class AccountingDocumentModel
{
[Key]
public int Id { get; set; }
[Required, StringLength(50)]
public string TypeOfAccountingDocument { get; set; }
[Required, StringLength(50)]
public string IdNumber { get; set; }
public int ContractorId { get; set; }
[Required, StringLength(8000)]
public string OperationDescription { get; set; }
public double OperationValue { get; set; }
[DataType(DataType.Date)]
public DateTime OperationDate { get; set; }
public ContractorModel Kontrahent { get; set; }
public List<SaleRecordsModel> SaleRecord { get; set; }
public KPiREntryModel KPiREntries { get; set; }
}
}
Relacje wyglądają następująco:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<AccountingDocumentModel>()
.HasOne(x => x.Kontrahent)
.WithMany(x => x.Documents)
.HasForeignKey(x => x.ContractorId);
modelBuilder.Entity<KPiREntryModel>()
.HasOne(x => x.KPiR)
.WithMany(x => x.KPiREntries)
.HasForeignKey(x => x.KPiRId);
modelBuilder.Entity<KPiREntryModel>()
.HasOne(x => x.AccountingDocument)
.WithOne(x => x.KPiREntries);
modelBuilder.Entity<SaleRecordsModel>()
.HasOne(x => x.AccountingDocument)
.WithMany(x => x.SaleRecord)
.HasForeignKey(x => x.AccountingDocumentId);
}
Kod wykonuje się poprawnie i zapisuje dane i klucze obce do bazy. Natomiast, gdy próbuję czytać dane z bazy to otrzymuje błąd:
Nie rozumiem czemu EF nie wczytał nawigacji