Больше проверки на сгенерированные классы сущностей Linq
Мы используем sqlmetal для генерации нашего DBML, запускаем его через преобразование, а затем используем sql metal для генерации классов DataContext - кроме того, я хочу автоматически сгенерировать некоторую проверку для сущностей на основе некоторых метаданных, которые мы храним в базе данных о каждая сущность и ее атрибуты. Например, если у сущности есть то, что я знаю как поле "EmailAddress" метатипа "Электронная почта", я хотел бы создать метод OnValidate для сущности электронной почты, чтобы проверить, соответствует ли она моему регулярному выражению. Это все прекрасно, и я могу сделать это так в другом файле:
public partial class MYENTITY
{
partial void OnValidate(System.Data.Linq.ChangeAction action)
{
if(action != System.Data.Linq.ChangeAction.Delete)
{
//check the validity of my email field or anything else
}
}
}
Как я могу сделать это, в то же время предоставляя разработчикам, которые хотят использовать этот DataContext, возможность подключать свою собственную логику к методу OnValidate для этой сущности? В нашей ситуации это будет бизнес-логика, специфичная для разрабатываемого приложения. Дополнения, которые я описал выше, являются всего лишь гарантиями того, что данные, поступающие в базу данных, соответствуют ожидаемым.
Спасибо за любую помощь. Новое здесь, поэтому извиняюсь, если я сделал что-то не так.
1 ответ
Если я вас правильно понимаю, вы хотите иметь возможность динамически генерировать метод OnValidate в определенном файле, используя вашу метаду, но при этом позволить своим разработчикам добавлять настройки в метод OnValidate? Один из способов - сгенерировать код, используя этот шаблон:
public partial class MYENTITY
{
partial void OnValidateCustomization();
public void OnValidate(System.Data.Linq.ChangeAction action)
{
if(action != System.Data.Linq.ChangeAction.Delete)
{
//hook for code generator
}
OnValidateCustomization();
}
}
И пусть ваши разработчики находятся в другом файле или в том же файле, в зависимости от того, как вы обрабатываете существующие файлы при запуске создания файла динамического кода, реализуйте метод OnValdateCustomization():
public partial class MYENTITY
{
partial void OnValidateCustomization()
{
Console.WriteLine("I Worked.");
}
}
Тем не менее, я делаю предположения о том, как вы динамически генерируете код. Не могли бы вы также поместить токены в сгенерированные файлы и разрешить их модификацию вместо того, чтобы просто копировать их, когда вы снова запускаете динамический генератор кода? То есть вы просто вводите эти токены вместо того, чтобы заменять весь файл? Argh, это недостающие детали...