[英]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.