(Follow-Up-Question to Как изменить имя / источник таблицы LINQ O / R-M во время выполнения? )
Мне нужно изменить источник таблицы таблицы LINQ 2 SQL O / R-Mapper во время выполнения. Для этого мне нужно создать XmlMappingSource . В командной строке я мог бы использовать SqlMetal для создания этого файла сопоставления, но я хотел бы создать файл сопоставления во время выполнения в памяти.
XmlMappingSource - это простой xml-файл, который выглядит примерно так:
<?xml version="1.0" encoding="utf-8"?>
<Database Name="MyDatabase" xmlns="http://schemas.microsoft.com/linqtosql/mapping/2007">
<Table Name="dbo.MyFirstTable" Member="MyFirstTable">
<Type Name="MyFirstTable">
<Column Name="ID" Member="ID" Storage="_ID" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" IsDbGenerated="true" AutoSync="OnInsert" />
<Association Name="WaStaArtArtikel_WaVerPreisanfragen" Member="WaStaArtArtikel" Storage="_WaStaArtArtikel" ThisKey="ArtikelID" OtherKey="ID" IsForeignKey="true" />
</Type>
</Table>
<Table Name="dbo.MySecondTable" Member="MySecondTable">
<Type Name="MySecondTable">
<Column Name="ID" Member="ID" Storage="_ID" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" IsDbGenerated="true" AutoSync="OnInsert" />
<Column Name="FirstTableID" Member="FirstTableID" Storage="_FirstTableID" DbType="UniqueIdentifier NOT NULL" />
<Association Name="MySecondTable_MyFirstTable" Member="MyFirstTable" Storage="_MyFirstTable" ThisKey="FirstTableID" OtherKey="ID" IsForeignKey="true" />
</Type>
</Table>
</Database>
Это должно быть возможно создать с помощью отражения, например, я могу получить имя базы данных из контекста данных, например:
using System.Data.Linq.Mapping;
using System.Xml.Linq;
XDocument mapWriter = new XDocument();
DatabaseAttribute[] catx = (DatabaseAttribute[])typeof(WcfInterface.WaDataClassesDataContext).GetCustomAttributes(typeof(DatabaseAttribute), false);
XElement xDatabase = new XElement("Database");
xDatabase.Add(new XAttribute("Name", catx[0].Name));
mapWriter.Add(xDatabase);
Моя проблема: я не могу найти хорошую документацию по отображению, поэтому извлечение необходимой информации весьма подвержено ошибкам - возможно, кто-то может указать мне хорошие документы по сопоставлению или, что еще лучше, пример кода создать файл сопоставления?