2012-03-22 80 views
-1

我对EF模型中的EF和XML颜色有疑问。检查EF中的XML颜色是否包含特定值

我在我的项目中有许多领域的搜索页面。我相交我的价值观与代码:

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)做工精良,诠释等

但是,当我尝试做XML coloumn这样的操作,我得到异常:

的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

我猜这是不允许的操作。第一个问题是EF不支持XML列。它将它们用作任何其他字符串列。因此,当您调用Contains时,它会将该方法转换为与varchar列等效的SQL。显然数据库不允许这个XML列没有先转换成varchar。在这里,我们遇到了最初的问题。由于EF没有看到XML列,因此无法在其查询生成器中将其转换。

相关问题