2012-03-22 9 views
-1

EFモデルでEFおよびXML coloumnに関する質問があります。EFのXML coloumnに特定の値が含まれていることを確認してください。

多くのフィールドを持つ私のプロジェクトに検索ページがあります。

などint型、文字列などのすべての単純型についても

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); 
     } 
    } 
} 

この作品をしかし、私はXMLのcoloumn上で、このような操作を実行しようとするとき、私は例外を取得::私はコードで私の値を交差

のInnerException = { "データ型NVARCHAR、テーブル 'dbo.ServicesRegistrations'、カラム 'MetadataXml' へのデータ・タイプXML から許可されていない暗黙の変換は、このクエリを実行するために、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に変換されます。明らかに、データベースは、最初にvarcharに変換することなく、XML列に対してこれを許可しません。そして、ここで最初の問題に行きます。 EFではXML列が表示されないため、クエリージェネレータでは変換できません。

関連する問題