Может кто-нибудь объяснить, что делают REF, CREATEREF, DEREF, KEY в Entity SQL? - PullRequest
4 голосов
/ 30 сентября 2011

Я не могу найти хорошую документацию по этим операторам. Может кто-нибудь привести примеры использования и объяснить, что они делают?

1 Ответ

0 голосов
/ 01 октября 2011

Ссылка CREATEREF для Entity SQL: http://msdn.microsoft.com/en-us/library/bb386880(v=VS.90)

Используется для «изготовления ссылок на сущность в наборе сущностей».Вы также можете найти ссылки REF и DEREF по ссылке.

Для VS 2010 ссылка: http://msdn.microsoft.com/en-us/library/bb386880(v=VS.100)

Образец из MSDN:

ВВ приведенном ниже примере Orders и BadOrders являются наборами сущностей типа Order, а Id предполагается как свойство единственного ключа Order.Пример иллюстрирует, как мы можем создать ссылку на сущность в BadOrders.Обратите внимание, что ссылка может быть висящей.То есть ссылка может фактически не идентифицировать конкретную сущность.В этих случаях операция DEREF для этой ссылки возвращает нулевое значение.

 select CreateRef(LOB.BadOrders, row(o.Id)) 
from LOB.Orders as o 

Пример кода использования структуры сущностей SQL:

using (EntityConnection conn =
    new EntityConnection("name=AdventureWorksEntities"))
{
    conn.Open();
    // Create a query that takes two parameters.
    string esqlQuery =
        @"SELECT VALUE Contact FROM AdventureWorksEntities.Contact 
                    AS Contact WHERE Contact.LastName = @ln AND
                    Contact.FirstName = @fn";

try
{
    using (EntityCommand cmd = new EntityCommand(esqlQuery, conn))
    {
        // Create two parameters and add them to 
        // the EntityCommand's Parameters collection 
        EntityParameter param1 = new EntityParameter();
        param1.ParameterName = "ln";
        param1.Value = "Adams";
        EntityParameter param2 = new EntityParameter();
        param2.ParameterName = "fn";
        param2.Value = "Frances";

        cmd.Parameters.Add(param1);
        cmd.Parameters.Add(param2);

        using (DbDataReader rdr = cmd.ExecuteReader(CommandBehavior.SequentialAccess))
        {
            // Iterate through the collection of Contact items.
            while (rdr.Read())
            {
                Console.WriteLine(rdr["FirstName"]);
                Console.WriteLine(rdr["LastName"]);
            }
        }
    }
}
catch (EntityException ex)
{
    Console.WriteLine(ex.ToString());
}
conn.Close();
}
...