Часто задаваемые вопросы о LINQ: третья часть - Как с помощью файлов XML увязать атрибуты LINQ с простыми классами .NET?
ОГЛАВЛЕНИЕ
Как с помощью файлов XML увязать атрибуты LINQ с простыми классами .NET?
LINQ обеспечивает увязку XML на базе атрибутов. Можно определить увязку LINQ с чистым классом .NET в файле XML, как показано ниже для класса clsCustomer. Механизм LINQ читает увязку из файла XML и применяет ее к простым классам .NET.
public class clsCustomer
{
private int _intCustomerId;
private string _strCustomerName;
private string _strCustomerCode;
public int CustomerId
{
set
{
_intCustomerId = value;
}
get
{
return _intCustomerId;
}
}
public string CustomerName
{
set
{
_strCustomerName = value;
}
get
{
return _strCustomerName;
}
}
public string CustomerCode
{
set
{
_strCustomerCode = value;
}
get
{
return _strCustomerCode;
}
}
}
Создается простой файл XML, определяющий увязку с членами класса.
<?xml version="1.0" encoding="utf-8"?>
<Database Name="TstServer" xmlns="http://schemas.microsoft.com/linqtosql/mapping/2007">
<Table Name="dbo.Customer" Member="WebAppMappingXML.clsCustomer">
<Type Name="WebAppMappingXML.clsCustomer">
<Column Name="CustomerId" Member="CustomerId" />
<Column Name="CustomerName" Member="CustomerName" />
<Column Name="CustomerCode" Member="CustomerCode" />
</Type>
</Table>
</Database>
Чтобы привязать увязку XML к простому классу .NET, надо создать объект XMLMappingSource, как показано во фрагменте кода ниже.
XmlMappingSource xms = XmlMappingSource.FromUrl(physicalPath + "Mapping.xml");
Надо передать объект XMLMappingSource классу DataContext, показанному в следующем фрагменте кода.
DataContext objContext = new DataContext(strConn, xms);
Наконец, извлекается таблица, и объекты-сущности обходятся в цикле.
var query = from customer in objContext.GetTable<clsCustomer>()
select customer;
foreach (var item in query)
{
Response.Write(item.CustomerCode + "<br>");
}
Как с помощью файлов XML увязать хранимые процедуры с классами .NET?
Если в проекте есть хранимые процедуры, можно использовать элемент XML Function для определения имени хранимой процедуры в файле XML. Не меняется код клиента для привязки объектов DataContext и XMLMappingsource.
<?xml version="1.0" encoding="utf-8"?>
<Database Name="TstServer" xmlns="http://schemas.microsoft.com/linqtosql/mapping/2007">
<Table Name="dbo.Customer" Member="WebAppMappingXML.clsCustomer">
<Type Name="WebAppMappingXML.clsCustomer">
<Column Name="CustomerId" Member="CustomerId" />
<Column Name="CustomerName" Member="CustomerName" />
<Column Name="CustomerCode" Member="CustomerCode" />
</Type>
</Table>
<Function Name="dbo.sp_getCustomerCode" Method="getCustomerByCode">
<Parameter Name="CustomerCode" Parameter="" />
<ElementType Name="clsCustomer" />
</Function>
</Database>