Model DTO jest walidowany przez EF Core, a nie jest encją

1

Witam.
Mam model

 public class Sale
 {
     public SaleDocument SaleDocument { get; set; }
     public List<SaleDocumentElement>? SaleElements { get; set; }
     public List<SaleDocument>? SaleAdvice { get; set; }
 }

Ten model jest wykorzystywany do metody POST, aby dodać dokument wraz z fakturami zaliczkowymi.

Dostaje błąd z EF o treści

The entity type 'List<SaleDocument>' was not found. Ensure that the entity type has been added to the model.

Model SaleDocument oraz SaleDocumentElement są encją. Dlaczego EF klasę Sale traktuje jako encje i to tak dziwnie waliduje?

0

Ale to chyba za mało kodu pokazałeś. Dodanie + konfiguracje encji by się przydały

0

DbContext

 public class OptimaContext : DbContext
 {
     private readonly IConfiguration _configuration;
     public DbSet<DocumentDefinition> DocumentDefinitions { get; set; } = null!;
     public DbSet<Category> Categories { get; set; } = null!;
     public DbSet<BankEntry> BankEntries { get; set; } = null!;
     public DbSet<BankEvent> BankEvents { get; set; } = null!;
     public DbSet<BankAccount> BankAccounts { get; set; } = null!;    
     public DbSet<BankReport> BankReports { get; set; } = null!;  
     public DbSet<Customer> Customers { get; set; } = null!;
     public DbSet<DocumentHeader> DocumentHeaders { get; set; } = null!;
     public DbSet<DocumentHeaderFile> DocumentHeaderFiles { get; set; } = null!;
     public DbSet<BinaryData> BinaryDatas { get; set; } = null!;
     public DbSet<PaymentForm> PaymentForms { get; set; } = null!;
     public DbSet<Vat7Element> Vat7Elements { get; set; } = null!;
     public DbSet<VatDocument> VatDocuments { get; set; } = null!;
     public DbSet<VatElement> VatElements { get; set; } = null!;
     public DbSet<VatRegister> VatRegisters { get; set; } = null!;
     public DbSet<SaleDocument> SaleDocuments { get; set; } = null!;
     public DbSet<SaleDocumentElement> SaleElements { get; set; } = null!;
     public DbSet<SaleDocumentVat> SaleDocumentVats { get; set; } = null!;
     public DbSet<SaleDocumentRelations> SaleDocumentRelations { get; set; } = null!;
     public DbSet<Product> Products { get; set; } = null!;
     public DbSet<ProductPrice> ProductPrices { get; set; } = null!;

     public OptimaContext(IConfiguration configuration)
     {
         _configuration = configuration;
     }

     protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
     { 
         optionsBuilder.UseSqlServer(_configuration.GetConnectionString("Company"));
         optionsBuilder.LogTo(Console.Write);
     }

     protected override void OnModelCreating(ModelBuilder modelBuilder)
     {
         base.OnModelCreating(modelBuilder);

         modelBuilder.Entity<Product>().HasKey(x => x.Id);
         modelBuilder.Entity<ProductPrice>().HasKey(x => new { x.Id, x.ProductId });
         modelBuilder.Entity<Product>().HasMany(x => x.Prices).WithOne(x => x.Product);

         modelBuilder.Entity<SaleDocument>().HasKey(x => x.Id);
         modelBuilder.Entity<SaleDocumentElement>().HasKey(x => new { x.Id, x.SaleDocumentId });
         modelBuilder.Entity<SaleDocument>().HasMany(x => x.Elements).WithOne(x => x.Document);
         modelBuilder.Entity<SaleAdviceDocumentElement>().HasNoKey();
         modelBuilder.Entity<SaleDocument>().Ignore(x => x.AdviceElements);
     }

     public IDbConnection CreateDatabaseConnection()
     {
         return new SqlConnection(_configuration.GetConnectionString("Company"));
     }
 }
1

A jak kod dodawania danych do bazy?

0

Tego jest dużo, połowy projektu nie będę przecież wrzucał. Jeśli chodzi o inserty to w pętli leci po SaleAdvice, ale samo List<SaleDocument> nie jest encją i nie jest dodawane do bazy.

PS.
Poprawka polegała na tym, aby dać możliwość insertowania więcej niż jednej zaliczki. Jak zrobiłem z SaleDocument saleAdvice listę List<SaleDocument> saleAdvice to EF się oburzył...

1

pokaz jak dodajesz a nie dyrdymaly jakies wypisujesz :)

jak iterujesz po liscie i robisz tak: context.SaleDocument.Add(saleDocument); to chyba powinno banglać?

PS. Sugerowalbym List<SaleDocument> zamiast List<SaleDocument>? - ostatnio jakos lepiej mi sie uzywa pustych list niz nulli

3

Dobra, faktycznie 🤦‍♂️ W dwóch miejscach miałem dbContext.Add(document.SaleAdvice), czyli robiłem insert całej listy zamiast tego co przechodzę w pętli... Dziękuje i przepraszam ✌

1 użytkowników online, w tym zalogowanych: 0, gości: 1