【发布时间】:2015-02-16 12:46:33
【问题描述】:
我使用的是 EF6 代码优先(通用存储库概念)
创建记录的示例代码:
Generic.cs:
public T Create<T>(T t) where T : class
{
T newEntry = this.dbContext.Set<T>().Add(t);
this.SaveChanges();
return newEntry;
}
实际代码:
var customer = new Customer{
Name = "Adams",
Amount = 1000
};
CustomerId是AutoIdentity列,会自动生成Id。
与产品具有一对多关系的客户表(产品表中的客户 ID FK)
现在我在产品列表中添加新的 CustomerID
var productsList = new List<Product>
{
new Product
{
ProdName = "crocin",
Date = DateTime.Parse("2003-09-01"),
Customer.CustomerId = newCustomerId //
},
new Product
{
ProdName = "crocin1",
Date = DateTime.Parse("2003-09-01"),
Customer.CustomerId = newCustomerId //
},
new Product
{
ProdName = "crocin2",
Date = DateTime.Parse("2003-09-01"),
Customer.CustomerId = newCustomerId //
}
};
现在我要访问数据库两次,因为首先我得到 CustomerId,然后我将 New CustomerId 分配给所有选定的产品。
代码如下:
var newCustomer = Generic.Create<Customer>(customer);
迭代产品列表,我将 newCustomerId 分配到 Products..
foreach(var product in productList)
{
product.CustomerId = newCustomerId;
Generic.Create<Product>(product);
}
是否可以将此代码更改为更通用的方式来实现类似这样的东西..
Create(T parentTable, List<T> childTableList)
{
// First Inserting ParentTable
db.SaveChanges();
//Fetching ID
// Inserting Into ChildTables..
db.SaveChanges();
}
请建议我扩展此代码...
【问题讨论】:
标签: c#-4.0 generics entity-framework-6 .net-reflector