是的,有一种方法可以使用 Translate 实现。
摘自官方文档:
var cmd = dbContext.Database.Connection.CreateCommand();
cmd.CommandText = "[dbo].[GetAllCustomersAndOrders]";
dbContext.Database.Connection.Open();
var reader = cmd.ExecuteReader();
var Customers= ((IObjectContextAdapter)dbContext)
.ObjectContext
.Translate<Customer>(reader, "Customers", MergeOption.AppendOnly);
reader.NextResult();
var Orders = ((IObjectContextAdapter)db)
.ObjectContext
.Translate<Order>(reader, "Orders", MergeOption.AppendOnly);
就将结果中的几列映射为一个二级复杂类型存在什么问题吗?例如:
SELECT FirstName, LastName, OrderId FROM Orders,我想将其映射为:
public class Order { public Customer customer { get; set; } public int OrderId { get; set; } }
最好在你的 Order 表格中使用 CustomerId 引用 Customer 表格,而不是使用 FirstName/LastName。这将是一次良好的重构,规范化数据库。否则,你将没有真正的映射对象和数据库之间的关系,因为你的 Order 对象将有一个在数据库中不存在的 Customer 属性。在这种情况下,你将不得不创建一个类,例如 NormalizedOrder。
public class NormalizedOrder {
int OrderId { get; set; };
Customer OrderCustomer { get; set; };
}
然后,在你检索所有订单的上面的代码之后,做如下操作:
var NormalizedOrders = Orders.Select new Order(){OrderId = e.OrderId, OrderCustomer = new Customer(){FirstName=>e.FirstName,LastName=>e.LastName}};
var NormalizedOrders = Orders.Select new Order(){OrderId = e.OrderId, Customer = new Customer(){FirstName=>e.FirstName,LastName=>e.LastName}};
- Francesco B.