2009-11-18 2 views
2

Возможно ли получить доступ к данным сопоставления Linq to SQL без экземпляра DataContext?Данные привязки Linq to SQL без DataContext

Я спрашиваю, потому что я пишу код генерации данных аудита, который будет запускаться только для некоторых объектов и некоторых столбцов объектов. Я хотел бы установить эти метаданные в статическом конструкторе до любого доступа Linq DB.

Например с точки зрения производительности, было бы предпочтительнее, чтобы обнаружить столбец первичного ключа сущности только один раз вместо запуска следующего кода для каждого измененного объекта в наборе изменений:

var metaTable = context.Mapping.GetTable(entityType); 
var key = (PropertyInfo)metaTable.RowType.DataMembers.Single(
        md => md.IsPrimaryKey).Member; 

До вызова:

key.GetValue(entity, null), 

ответ

2

Да, вам не нужен экземпляр DataContext, только тип.

MappingSource mappingSource = new AttributeMappingSource(); 
MetaModel mapping = mappingSource.GetModel(typeof(MyDataContext)); 

Здесь я использую AttributeMappingSource, вы могли бы использовать XmlMappingSource или другие реализации MappingSource.

+0

Отличные новости. Поскольку я просто перетащил имена таблиц в окно модели Visual Studio Linq, я предполагаю, что источник сопоставления атрибутов AttributeMappingSource - это все, что мне нужно? – camelCase

+0

Да, конструктор VS использует атрибуты. –

Смежные вопросы