Anas92 Ответов: 2

Как объединить список идентификаторов с другой таблицей в entityfreamworkcore


привет, ребята, я хочу сделать соединение для многих ко многим в efcore3.1 мой случай-это иметь класс продукта и класс счета-фактуры, и функция делает инициал счета-фактуры, а затем берет список продукта и присоединяется внутри.
как вы можете видеть на шаге join in customer invoice, продукты должны иметь список идентификаторов, как это сделать ???
<pre> ServicesResponse<InvoiceForGet> servicesResponse = new ServicesResponse<InvoiceForGet>();
            try
            {

                Invoice invoice = new Invoice
                {
                    InvoiceNote = addCustomerInvoice.InvoiceNote,
                    AdminId = addCustomerInvoice.AdminId,
                    CustomerId = addCustomerInvoice.CustomerId,
                    CompanyStoresId = addCustomerInvoice.CompanyStoresId,
                    InvoiceDate = addCustomerInvoice.InvoiceDate.Date
                };

                var result= await _drugDbContext.Products.Select(p => p.ProductId).ToListAsync();
                


                CustomerInvoice customerInvoice = new CustomerInvoice
                {
                    Products = result,
                    Invoice = invoice
                };
                await _drugDbContext.CustomerInvoices.AddAsync(customerInvoice);
                await _drugDbContext.SaveChangesAsync();
                servicesResponse.Data = _mapper.Map<InvoiceForGet>(invoice);
            }


Что я уже пробовал:

если я буду держать его так дайте e ошибку (
Cannot implicitly convert type 'System.Collections.Generic.List<int>' to 'DrugStore.Entities.Product'
)
я ищу но до сих пор не нашел ответа

Sandeep Mewara

Я могу предположить и ответить, но было бы лучше, если бы вы поделились подробностями своего счета-фактуры, продуктов, класса CustomerInvoice, чтобы понять, как вы их настроили. Используйте опцию "улучшить вопрос" для редактирования и обновления.

Anas92

я уже публикую всю информацию о классах и создаю класс addcustomerinvoice и помещаю в него список продукта, потому что я хочу сделать счет-фактуру и добавить список продукта, который уже будет находиться внутри базы данных(получить его, а затем присоединить к счету-фактуре клиента )

2 Ответов

Рейтинг:
2

Sandeep Mewara

1. Ваш CustomerInvoice имеет:

public Product Products { get; set; }
один продукт.

Но при создании CustomerInvoice вы предоставляете список:
var result= await _drugDbContext.Products.Select(p => p.ProductId).ToListAsync();
         
CustomerInvoice customerInvoice = new CustomerInvoice
{
    Products = result,
    Invoice = invoice
};

2. Вы выбираете не один продукт, а список productIds здесь:
var result= await _drugDbContext.Products.Select(p => p.ProductId).ToListAsync();

Вам нужно выбрать продукт, который соответствует определенному идентификатору, а затем использовать его в качестве продукта в пункте 1 выше.


Anas92

вы имеете в виду, например, использовать FirstOrDefaultAsync, чтобы взять один продукт и вставить в счет-фактуру я уже делаю это, и это работает, но таблица customerinvoice соединение между продуктом и счетом-фактурой, и я хочу сделать счет-фактуру и внутри нее много продуктов (форма, которую я понимаю во многих-многих, является начальной и таблицей, а затем сделать соединение внутри соединительной таблицы).
извините за правку вопроса я об этом не знаю

Sandeep Mewara

Тогда вам нужно сменить класс:
Ваш customerinvoice должен иметь:
публичный список<product> Products { get; set; }

Anas92

вы имеете в виду, что если я хочу сделать(функция для вставки)много счетов-фактур и много продуктов, я должен сделать их оба списка внутри счета-фактуры клиента?

Sandeep Mewara

Я имею в виду - в настоящее время вы сопоставляете CustomerInvoice с 1 продуктом в модели данных. Но, вам нужно одно ко многим. Итак, вам нужно сначала перейти от одного к списку, а затем работать соответственно.

Anas92

Я уже делаю это список продукта внутри счета клиента и все та же ошибка

Рейтинг:
1

Anas92

<pre lang="c#"><pre> public class Invoice
    {
        public int InvoiceId { get; set; }
        public DateTimeOffset InvoiceDate { get; set; } = DateTimeOffset.UtcNow;
        public string InvoiceNote { get; set; }
        public int CustomerId { get; set; }
        public Customer Customer { get; set; }
        public int AdminId { get; set; }
        public Admin Admin { get; set; }
        public int CompanyStoresId { get; set; }
        public CompanyStore CompanyStores { get; set; }
        public ICollection<CustomerInvoice> CustomerInvoices { get; set; }
         = new List<CustomerInvoice>();
        public ICollection<ProductsReturn> ProductsReturn { get; set; }
         = new List<ProductsReturn>();
    }


<pre lang="c#"><pre> public class Product
    {
        public int ProductId { get; set; }
        public string ProductName { get; set; }
        public string Company { get; set; }
        public float Price { get; set; }
        public int Quantity { get; set; }
        public string Description { get; set; }
        public string ProductImage { get; set; }
        public string BarCode { get; set; }
        public float BuyPrice { get; set; }
        public ICollection<ProductAndCategory> ProductCategory { get; set; }
= new List<ProductAndCategory>();
        public ICollection<TransportInvoice> transportInvoices { get; set; }
= new List<TransportInvoice>();
        public ICollection<CustomerInvoice> CustomerInvoices { get; set; }
       = new List<CustomerInvoice>();
        public ICollection<ProductsReturn> ProductsReturn { get; set; }
      = new List<ProductsReturn>();
        public int CompanyStoresId { get; set; }
        public CompanyStore CompanyStores { get; set; }
        public ICollection<OfficeInvoice> OfficeInvoices { get; set; }
   = new List<OfficeInvoice>();
        public ICollection<OfficeReturn> OfficeReturns { get; set; }
    = new List<OfficeReturn>();
    }

<pre lang="c#"><pre>public class CustomerInvoice
    {
        public int CustomerInvoiceId { get; set; }
        public int Quantity { get; set; }
        public float Discount { get; set; }
        public float TotalPrice { get; set; }
        public int InvoiceId { get; set; }
        public Invoice Invoice { get; set; }
        public int ProductId { get; set; }
        public Product Products { get; set; }
        public ICollection<ProductsReturn> ProductsReturn { get; set; }
       = new List<ProductsReturn>();
    }

<pre lang="c#"><pre>            modelBuilder.Entity<CustomerInvoice>(entity =>
            {
                modelBuilder.Entity<CustomerInvoice>().HasKey(ci => new { ci.ProductId, ci.InvoiceId });
                entity.HasKey(c => c.CustomerInvoiceId);
                entity.Property(c => c.Quantity).IsRequired();
                entity.Property(c => c.TotalPrice).IsRequired();
            });
            modelBuilder.Entity<CustomerInvoice>(entity =>
            {
                entity.HasOne(c => c.Products)
                       .WithMany(p => p.CustomerInvoices)
                       .HasForeignKey(c => c.ProductId)
                       .IsRequired(false)
                       .OnDelete(DeleteBehavior.NoAction);
            });
            modelBuilder.Entity<CustomerInvoice>(entity =>
            {
                entity.HasOne(c => c.Invoice)
                       .WithMany(i => i.CustomerInvoices)
                       .HasForeignKey(c => c.InvoiceId)
                       .IsRequired(false)
                       .OnDelete(DeleteBehavior.NoAction);
            });


<pre lang="c#"><pre>public class AddCustomerInvoice
    {
        public ICollection<Product> products { get; set; }
         = new List<Product>();
        public DateTime InvoiceDate { get; set; }
        public string InvoiceNote { get; set; }
        public int CustomerId { get; set; }
        public int AdminId { get; set; }
        public int CompanyStoresId { get; set; }
    }


Sandeep Mewara

Вы должны использовать опцию "улучшить вопрос" выше, чтобы отредактировать/обновить свой запрос.