繁体   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