マッピングファイルを書き換える理由は次の通り。複数のDBをまたいだクエリをLinq To Sqlで行う場合、マッピングファイルのTable要素は下記のようにServerName、DBNameを含んだ記述にしなければならない。
dbo.users → ServerName.DBName.dbo.users
SQL Server 2008で複数のDBを単一クエリで扱うための設定は下記を参照してほしい。
Linked Serverの設定方法
sp_addlinkedserver (Transact-SQL)
で、Linq To Xmlを使用してのマッピングファイルの読み込みなのだが、下記のようにXNamespaceを指定しないと予期したようにTable要素は取得できない。
var doc = XDocument.Load(mappingFilePath); XNamespace ns = "http://schemas.microsoft.com/linqtosql/mapping/2007"; var table = doc.Descendants(ns+"Table").Where(x => 条件).FirstOrDefault(); // 省略
Linq To Xmlに限らずXmlDocumentやXPathでもXmlファイルを操作する場合は、名前空間の指定のある要素にはそれぞれXNamespaceを明示的に指定しなければ予期したように動作しないので注意しよう。
0 件のコメント:
コメントを投稿