我想一次将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();
}
任何人都知道怎么做?
答案 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
});