【问题标题】:ADO.Net Entity Framework: What's this?ADO.Net 实体框架:这是什么?
【发布时间】:2009-03-16 14:07:32
【问题描述】:
我刚开始使用 ADO.NET Entity Framework 进行开发,但我不知道该怎么写:
ClientEntities clientContext = new ClientEntities();
ObjectQuery clientQuery =
clientContext.Client.Where("it.email = @email AND it.password = @password",
new ObjectParameter("email", "xxx@hotmail.com"),
new ObjectParameter("password", "xAdxar12s"));
Console.WriteLine(clientQuery.Count());
Console.ReadLine();
它有效!
但是,这是什么?
"it.email = @email AND it.password = @password"
在哪里可以学习这种“SQL 语法”?我不知道为什么我必须使用 it.email 或 SELECT VALUE 的含义。是“Entity SQL”吗?
谢谢!
【问题讨论】:
标签:
c#
sql
entity-framework
ado.net
【解决方案1】:
是的,这是 Entity SQL。
“LINQ to Entities”是从上下文中检索实体实例的一种方式。实体 SQL 是另一个。两者都工作,得到支持,并且相辅相成。
SELECT VALUE 表示“此语句应返回实体实例”。 (与行包装器相反。)您将得到一个对象查询。
现在,“它”是什么?嗯,Client 是生成的 ObjectContext 的一个属性,类型为 ObjectQuery。您可以在模型的 codegen 文件(扩展名为 .Designer.cs 的文件)中查看 Client 的源代码:
/// <summary>
/// There are no comments for Client in the schema.
/// </summary>
public global::System.Data.Objects.ObjectQuery<Client> Client
{
get
{
if ((this._Client== null))
{
this._Client = base.CreateQuery<Client>("[Client]");
}
return this._Client;
}
}
private global::System.Data.Objects.ObjectQuery<Client> _Client;
你看到那里的实体 SQL 了吗?不仔细看很容易错过。我把它复制到这里:
"[Client]"
我找不到此语法的文档,但这主要是因为搜索方括号而不是任何其他实体 SQL 关键字对于大多数搜索引擎来说有点困难。与 T-SQL 一样,方括号似乎意味着“将它们之间的所有内容视为标识符”。但该语句似乎是以下的简写:
"SELECT VALUE it FROM MyEntities.[Client] AS it"
所以现在你知道“它”是从哪里来的了。
【解决方案2】:
你从哪里得到的样本?这样做的正常方法是:
string email = "xxx@hotmail.com",
pw = "xAdxar12s";
var qry = from client in clientContext.Client
where client.email == email
&& client.password == pw
select client;
Console.WriteLine(qry.Count());
这为您提供静态类型等 - 并且更友好!
(注意:检查文件顶部是否有using System.Linq;)