这是代码
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会详细讨论。
答案 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
)并检查阅读器中的字段 - 然后构建一些即时创建的代码(通常是缓存的)新对象并设置成员。