Проверьте, содержит ли столбец XML в EF конкретное значение - PullRequest
0 голосов
/ 22 марта 2012

У меня есть вопрос о столбце EF и XML в модели EF.

В моем проекте есть страница поиска со многими полями.Я пересекаю свои значения с кодом:

IQueryable<ServicesRegistration> query = null;

using (SelfServiceEntities context = new SelfServiceEntities())
{
    query = context.ServicesRegistrations.Include("BanStatusType").Where(c => c.AppID == "MyApp");
    if (filter.RequestStatus != null)
    {
        if (query == null)
        {
            query = context.ServicesRegistrations
                           .Include("BanStatusType")
                           .Where(c => c.BanStatusType.StatusID == filter.RequestStatus);
        }
        else
        {
            query = query.Where(c => c.BanStatusType.StatusID == filter.RequestStatus);
        }
    }
}

Это хорошо работает для всех простых типов, таких как string, int и т. Д.

Но когда я пытаюсь выполнить такую ​​операцию над столбцом XML, я получаю исключение:

InnerException = {"Запрещено неявное преобразование из типа данных xml в тип данных nvarchar, таблица 'dbo.ServicesRegistrations', столбец 'MetadataXml'. Используйте функцию CONVERT для выполнения этого запроса."}

Мой код:

if (!string.IsNullOrEmpty(filter.SerialNumber))
{
    if (query == null)
    {
        query = context.ServicesRegistrations
                       .Include("BanStatusType").Where(c => c.MetadataXml.Contains(filter.SerialNumber));
    }
    else
    {
        query = query.Where(c => c.MetadataXml.Contains(filter.SerialNumber));
    }
}

Я использую Ef 3.5 и знаю, что в нем есть какая-то проблема с реализацией XML-данных.

Кто-нибудь решил такую ​​проблему?проблема?Спасибо

1 Ответ

1 голос
/ 22 марта 2012

Полагаю, это недопустимая операция.Первая проблема заключается в том, что EF не поддерживает столбцы XML.Он использует их как любой другой строковый столбец.Поэтому, когда вы вызываете Contains, он преобразует метод в эквивалент SQL для столбцов varchar.Очевидно, база данных не допускает этого для столбцов XML без предварительного преобразования их в varchar.И вот мы подошли к исходной проблеме.Поскольку EF не видит столбец XML, он не может преобразовать его в своем генераторе запросов.

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