2012-03-22 127 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列,因此無法在其查詢生成器中將其轉換。

相關問題