Linq插入多行到一行

时间:2018-01-08 02:18:10

标签: c# asp.net linq

我想一次将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; }
}

Customers表如下所示:

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();
    }

任何人都知道怎么做?

1 个答案:

答案 0 :(得分:0)

那是因为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属性执行相同操作。

如果您确实希望它成为列表,请将属性更改为:

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

Customer类应该仍然是单数。

然后将上述函数中的赋值行更改为:

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