实体框架:如何在向数据库添加或更新数据时包含嵌套子节点
本文关键字:数据 更新 包含 子节点 嵌套 添加 数据库 框架 实体 | 更新日期: 2023-09-27 18:16:03
下面我将插入客户和嵌套子节点。客户有子呼叫地址,地址有子呼叫联系人详细信息。
using (var db = new TestDBContext())
{
var customer = new Customer
{
FirstName = "Test Customer1",
LastName = "Test Customer1",
Addresses = new List<Addresses>
{
new Addresses
{
Address1 = "test add1",
Address2 = "test add2",
IsDefault=true,
Contacts = new List<Contacts>
{
new Contacts { Phone = "1111111", Fax = "1-1111111",IsDefault=true, SerialNo=1 },
new Contacts { Phone = "2222222", Fax = "1-2222222",IsDefault=false, SerialNo=2 }
}
},
new Addresses
{
Address1 = "test add3",
Address2 = "test add3",
IsDefault=false,
Contacts = new List<Contacts>
{
new Contacts { Phone = "33333333", Fax = "1-33333333",IsDefault=false, SerialNo=1 },
new Contacts { Phone = "33333333", Fax = "1-33333333",IsDefault=true, SerialNo=2 }
}
}
}
};
db.Customer.Add(customer);
db.SaveChanges();
int id = customer.CustomerID;
}
假设现在我想更新客户及其关联的地址和联系人详细信息。
i浏览器很少有类似的线程在这里。我看到人们删除子数据并插入新的而不是更新。这里有一个链接https://stackoverflow.com/a/27177623/728750
它们以这种方式包含child
var existingParent = _dbContext.Parents
.Where(p => p.Id == model.Id)
.Include(p => p.Children)
.SingleOrDefault();
但是在我的情况下,我有多个子节点,比如地址和联系方式,那么我怎么能包括客户的第一个地址,然后我想包括地址的联系方式子节点。
请告诉我怎么做。
你在找这个吗
using System.Data.Entity; // NB!
var company = dbContext.Parents
.Include(co => co.Addresses.Select(ad=> ad.Contacts))
.FirstOrDefault(p => p.Id == model.Id);
简短示例
var company = context.Companies
.Include(co => co.Employees.Select(emp => emp.Employee_Car))
.Include(co => co.Employees.Select(emp => emp.Employee_Country))
.FirstOrDefault(co => co.companyID == companyID);
。包含Msdn详细信息汇总
包含集合、集合和引用两个级别down:
query.Include(e => e.Level1Collection.Select(l1 => l1.Level2Collection.Select(l2 => l2.Level3Reference)))