在C#中自动从模型生成好友类

时间:2010-04-28 19:10:24

标签: c# asp.net linq-to-sql linq-to-entities data-annotations

我为我的模型使用Linq to Sql(虽然这同样适用于Entity Framework),我发现自己一直在为我的模型创建好友类。我发现这个耗费时间和重复性。有没有一种简单的方法可以根据模型自动生成这些好友类?也许是视觉工作室宏?

我想要创建的好友类的示例:

[MetadataType(typeof(PersonMetadata))]
public partial class Person
{
}

public class PersonMetadata
{
    public object Id { get; set; }

    public object FirstName { get; set; }
}

提前致谢。

4 个答案:

答案 0 :(得分:3)

不要生成好友类。好友课程有点像kludge。相反,写一个associated metadata provider。这会在运行时为动态数据生成正确的提示。这是最初的一点工作,但从长远来看会有所回报。

答案 1 :(得分:1)

我会看一下Text Templates (tt) in Visual Studio 2010(我相信你可以在2008年使用它们,但是对它们的支持不如2010年那么多。)

它允许您使用代码编写通用模板,您可以使用它来一般地处理LINQ to SQL类型并为其生成伙伴类。

答案 2 :(得分:1)

我听说T4模板有很多好处。

以下是我的意见,并不打算发动火焰战。

我在ORM方面没有取得很大成功。他们生成的SQL往往不是最优的,你最终会跳过箍来绕过框架中的限制。此外,将查询代码放在您的应用程序中而不是在我认为属于它的数据库中,违反了明确的n层架构,并将更多数据库维护责任放在开发人员身上,从而消除了部署专用的部分好处DBA。此外,它使查询的中途调试几乎不可能。

我开始编写一个实用程序来从表定义生成db代理类和相关的存储过程,并将其转换为Visual Studio插件。这是大约1200行代码,不包括String Template library。我已经使用这个设置大约6个月了,并且没有遗憾。

答案 3 :(得分:0)

您可能想看看T4模板。这是来自Oleg Sych的quick intro。 这些工作就像CodeSmith或MyGeneration代码生成模板一样。

要快速启动,您可能还需要花一些时间来剖析实体框架的替代代码生成模板,例如Self-Tracking Entities。这些是T4模板,用于查看模型.EDMX中的元数据文件以生成备用实体。这些可能会让您了解如何查看您的L2S模型并为您创建好友类。

希望这会有所帮助。祝你好运!