2011-04-29 61 views
1

集映射这里是代码LINQ并导致

 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和retun客户记录。我的问题如何结果可以存储在客户类自动....我不明白。如果您从这里看到这行代码 db.ExecuteQuery<Customer>我们可以了解到客户的结果将会返回并且客户数据将存储在客户类别中。如何自动存储数据&分配给客户类中的正确属性,因为客户类CustomerID属性名称可能是CustID ....然后会发生什么情况。

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

回答

0

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

注意之间的映射映射类型和DB-列/类型成员既受数据上下文(通常经由属性的成员,但不总是)所定义,但IIRC ExecuteQuery确实不是适用这些映射(我很高兴在这里纠正)。您可以通过db.Mapping.GetMetaType(typeof(Customer))进行检查。

这里的基本面,如果你执行

var cust = db.Customers.ToList(); 

除了db.Customers版本可以将更多的映射没有什么不同等

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