У меня есть приложение ASP.NET MVC с примитивным уровнем хранилища, которое в настоящее время передает сущности LINQ to SQL обратно в контроллеры, которые затем отправляют их в представления. Теперь я хочу начать использовать некоторые объектно-ориентированные объекты вместо сущностей LINQ to SQL, и я использую AutoMapper, чтобы помочь в этом. Для простого сопоставления свойства-свойства это удобно и тривиально просто, но теперь я столкнулся с проблемой сопоставления сущностей, которые сами содержат только текст шаблона и соединение с базой данных и информацию запроса. Я хотел бы сопоставить эти шаблонные типы источников с полностью замененными токенами типами назначения.
Например, у меня есть тип источника и назначения ...
public class Source
{
public int Id { get; set; }
public string MarkupTemplate { get; set; }
public string DatabaseConnectionString { get; set; }
public string DatabaseQuery { get; set; }
}
public class Destination
{
public int Id { get; set; }
public string Value { get; set; }
}
Исходный объект может выглядеть примерно так:
var source = new Source() {
Id = 123,
MarkupTemplate = "The %noun% is %adjective%.",
DatabaseConnectionString = "Some SQL Server conn string",
DatabaseQuery = "SELECT noun, adjective FROM things WHERE id=@id"
}
Во время картирования (или в другом месте, если это имеет смысл сделать ... Я открыт для предложений!) Мне нужно:
- Подключиться к базе данных, описанной в свойстве
DatabaseConnectionString
источника.
- Выполните запрос на выборку, который находится в свойстве
DatabaseQuery
источника, чтобы получить одну запись.
- Заменить токены, входящие в значение
MarkupTemplate
источника, значениями, найденными в записи, возвращенной из базы данных.
- Поместите замененный токеном контент в свойство
Value
назначения. В приведенном выше примере объекта source
свойство Value
назначения должно содержать «Автомобиль красного цвета». если запрос к базе данных возвращает «car» и «red» для существительного и прилагательного.
В моем взломанном прототипе я создал быстрые и грязные методы в хранилище для обработки шагов замены токена и возврата строки значения, замененной токеном, но я хотел бы попытаться очистить это в проекте с этим немного легче работать. В конечном счете, я хотел бы иметь простой механизм отображения, который может предоставлять мои конечные объекты, которые я могу отправлять в мои представления, где эти объекты максимально свободны от зависимостей.