LINQ和类中的结果集映射

时间:2011-04-29 10:47:11

标签: c# entity-framework

这是代码

        var customers = db.ExecuteQuery<Customer>(@"SELECT CustomerID, CompanyName, ContactName, ContactTitle, 
   Address, City, Region, PostalCode, Country, Phone, Fax
   FROM   dbo.Customers
   WHERE  City = {0}", "London");

foreach (Customer c in customers)
   Console.WriteLine(c.ContactName);

代码执行sql并重新记录客户记录。我的问题如何将结果自动存储在客户类中....我不明白。如果你看到这行代码 db.ExecuteQuery<Customer>从这里我们可以理解客户结果将返回,客户数据将存储在客户类中。如何自动存储数据&amp;分配给客户类中的正确属性,因为客户类CustomerID属性名称可能是CustID ....然后会发生什么。

db.ExecuteQuery<Customer>对我来说非常混乱,我只是不明白将使用返回客户数据创建新的客户实例....所以plzz会详细讨论。

1 个答案:

答案 0 :(得分:0)

ExecuteQuery只运行任意SQL(应用string.Format - esque参数化后),然后将IDataReader结果实现为一系列对象。

请注意,映射类型与db-columns / type-members之间的映射由数据上下文(通常通过成员上的属性定义,但是并非总是如此),但IIRC ExecuteQuery 应用这些映射(我很高兴在此更正)。您可以通过db.Mapping.GetMetaType(typeof(Customer))

进行检查

这里的基本原理与你执行

没什么不同
var cust = db.Customers.ToList();

除了db.Customers版本可以应用更多映射等。

实现本身(即创建对象和设置成员)是反射和元编程的一个例子;大多数ORM和微ORM在那里的工作方式基本相同:检查类型(上面的Customer)并检查阅读器中的字段 - 然后构建一些即时创建的代码(通常是缓存的)新对象并设置成员。