簡體   English   中英

Linq插入多對一行

[英]Linq insert many to one rows

我想一次將10行插入與另一個表具有多對一關系的表中。

MainTable.cs文件顯示如下:

public class MainTable
{
    public int Id { get; set; }
    [Required]
    public Customers Customers { get; set; }
    public string Attribute1 { get; set; }
    public string Attribute2 { get; set; }
}

客戶表如下所示:

public class Customers
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }
    public string Address { get; set; }
}

我試圖用10個不同的Attribute1列向MainTable添加10行,同時保持Customer不變。 但是當我嘗試如下添加它時,它沒有給我添加重復的CustomerId的選項:

    public void AddRecord(int customerId)
    {
        IEnumerable<Attributes> Attributes = GetAttributes();
        foreach (var attribute in Attributes)
        {
            _context.Add(new MainTable
            {
                 ***Customers.Id = customerId*** << Customers.Id doesn't exist.
                 Attribute1 = attribute
            });
        }
        _context.SaveChanges();
    }

有人知道怎么做嗎?

這是因為MainTable類(順便說一句,這是實體類的糟糕名稱)沒有客戶ID字段。 期望有一個完整的Customer對象。

您可以將Customer對象傳遞給函數:

public void AddRecord(Customer customer)
{
    IEnumerable<Attributes> Attributes = GetAttributes();
    foreach (var attribute in Attributes)
    {
        _context.Add(new MainTable
        {
             Customer = customer,
             Attribute1 = attribute
        });
    }
    _context.SaveChanges();
}

或者,您可以從函數內的ID獲取Customer對象:

public void AddRecord(int customerId)
{
    //First get the Customer object. This is an example, modify to your actual code
    Customer customer = GetCustomer(customerId);

    IEnumerable<Attributes> Attributes = GetAttributes();
    foreach (var attribute in Attributes)
    {
        _context.Add(new MainTable
        {
             Customer = customer,
             Attribute1 = attribute
        });
    }
    _context.SaveChanges();
}

您會注意到,我將MainTable.Customers屬性重命名為Customer 使用復數名詞會造成混淆。 您的Customer類不是列表,而是用於單個實體的,因此將其重命名為單數名詞Customer ,並對MainTable.Customers屬性執行相同的MainTable.Customers

如果您實際上希望將其作為列表,則將屬性更改為:

public List<Customer> Customers { get; set; }

Customer類仍應為單數。

然后將上述功能中的分配行更改為:

_context.Add(new MainTable
{
     Customers = new List<Customer>{ customer },
     Attribute1 = attribute
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM