【发布时间】:2008-11-26 00:54:11
【问题描述】:
如果能够以某种方式说生成的实体类中的某些属性应该由(比如说)验证属性(以及 Linq To SQL 列属性)修饰,那将非常方便。
它是某个地方的 T4 模板吗?或者还有其他方法可以给猫剥皮吗?
【问题讨论】:
标签: c# linq-to-sql templates code-generation
如果能够以某种方式说生成的实体类中的某些属性应该由(比如说)验证属性(以及 Linq To SQL 列属性)修饰,那将非常方便。
它是某个地方的 T4 模板吗?或者还有其他方法可以给猫剥皮吗?
【问题讨论】:
标签: c# linq-to-sql templates code-generation
Damien Guard 编写了可自定义的 T4 模板。见:
http://damieng.com/blog/2008/09/14/linq-to-sql-template-for-visual-studio-2008
...和:
【讨论】:
不,SqlMetal 工具负责处理 C# 的生成,它在其内部定义了 C# 的生成方式(或 VB 的生成方式)。
我不熟悉您想要的模板样式,但您可以尝试扩展生成的类(如果它们没有那么大的变化),因为它们只是部分类。
否则您将需要编写/查找 SqlMetal 的自定义实现
【讨论】:
不幸的是,对于分部类,您不能从分部类的另一部分向成员添加属性 - 即,如果 SqlMetal 定义属性Foo,则不能在您自己的一半@ 中向Foo 添加属性987654323@.
这消除了自定义此类文件的(通常)更强大的方法之一......您可能不得不抓住机会手动编辑生成的文件(在将其与 dbml 完全分离之后) - 或编写您自己的 dbml 解析器 frmo 从头开始(可能使用 xslt)。不容易。
【讨论】:
动态数据中的解决方法是使用可以修饰的元数据类:
[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; }
}
}
【讨论】: