【问题标题】: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.emailSELECT 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;

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-26
      相关资源
      最近更新 更多