Можно ли изменить C #, который генерирует Linq To SQL? - PullRequest
2 голосов
/ 26 ноября 2008

Было бы очень удобно иметь возможность каким-то образом сказать, что определенные свойства в сгенерированных классах сущностей должны, например, быть украшены, скажем, атрибутами проверки (а также атрибутами столбца Linq To SQL).

Это где-то шаблон Т4? Или есть другие способы снять кожу с кошки?

Ответы [ 4 ]

1 голос
/ 03 декабря 2008

Damien Guard написал шаблоны T4, которые можно настраивать. См:

http://damieng.com/blog/2008/09/14/linq-to-sql-template-for-visual-studio-2008

... и:

http://visualstudiomagazine.com/listings/list.aspx?id=560

0 голосов
/ 15 декабря 2008

Обходной путь в динамических данных - использование класса метаданных, который может быть оформлен:

[MetadataType(typeof(Product_Meta))]
 public partial class Product
 {        
   public partial class Product_Meta 
   {
     [Range(5, 50, ErrorMessage = "The product's reorder level must be greater than 5 and less than 50")]
     public object ReorderLevel { get; set; }         
   }  
 }

http://rachelappel.com/asp-net-dynamic-data/custom-validation-in-asp-net-dynamic-data-using-attributes/

0 голосов
/ 26 ноября 2008

К сожалению, с частичными классами вы не можете добавлять атрибуты к члену из другой части частичного класса - то есть, если SqlMetal определяет свойство Foo, вы не можете добавить атрибут к Foo в своей половине .cs.

Это устраняет один из (обычно) более мощных способов настройки таких файлов ... вам, вероятно, придется либо рискнуть и отредактировать сгенерированный файл вручную (после полного отсоединения его от dbml) - либо написать ваш собственный анализатор dbml от нуля (возможно, с помощью xslt). Не легко.

0 голосов
/ 26 ноября 2008

Нет, инструмент SqlMetal - это то, что обрабатывает генерацию C #, и он сам определяет, как генерируется C # (или VB в этом отношении).

Я не знаком с нужным вам стилем шаблона, но вы можете попробовать расширить сгенерированные классы (если они не так уж и велики), поскольку они являются просто частичными классами.

В противном случае вам нужно будет написать / найти пользовательскую реализацию SqlMetal

...