ADO.Net Entity Framework: что это? - PullRequest
1 голос
/ 16 марта 2009

Я только начинаю разработку с 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"?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 17 марта 2009

Да, это Entity SQL.

«LINQ to Entities» - это один из способов получения экземпляров сущностей из вашего контекста. Entity SQL - это другое. Оба работают, поддерживаются и дополняют друг друга.

SELECT VALUE означает «этот оператор должен возвращать экземпляры сущности». (В отличие от оболочки строк.) Вы получите запрос объекта назад.

Теперь, что такое "это"? Итак, Client - это свойство сгенерированного ObjectContext типа ObjectQuery . Вы можете посмотреть исходный код для клиента в файле codegen для модели (файл с расширением .Designer.cs):

    /// <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;

Вы видите там Entity SQL? Это легко пропустить, если вы не посмотрите внимательно. Я скопирую это сюда:

"[Client]"

Я не могу найти документацию по этому синтаксису, но это в основном потому, что поиск в квадратных скобках, а НЕ в любом другом ключевом слове Entity SQL, довольно сложен для большинства поисковых систем. Как и в T-SQL, квадратные скобки означают «рассматривайте все, что находится между ними, как идентификатор». Но это заявление выглядит как сокращение для:

 "SELECT VALUE it FROM MyEntities.[Client] AS it"

Так что теперь вы знаете, откуда это "исходит".

1 голос
/ 16 марта 2009

Откуда вы взяли этот образец? нормальный способ сделать это будет:

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; вверху файла)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...