我正在使用LINQ to SQL和C#。 有没有一种方法可以通过它从表模式生成实体类文件? 通过将表拖到图形设计器类上会生成类,但它们不是真正的类文件(我的意思是具有扩展名cs的实际文件)。
我知道我们可以先编写类文件,然后手动或以编程方式创建模式,但我想知道反向是否可行,可能正在使用某些第三方工具。我觉得以这种方式使用LINQ非常方便。
提前致谢。
答案 0 :(得分:3)
我对实体框架(v4)不熟悉LINQ to SQL,但EF肯定符合您的要求。您可以从Microsoft下载POCO templates for EF,在Extension Manager中直接通过VS2010(工具> Extension Manager,单击在线图库,然后搜索POCO)。该链接不仅仅是模板的下载,还包括如何开始的演练。
我还启动了a series of blog posts,它包含一些不错的T4模板,用于Entity Framework EDMX模型,可以为所有实体类自动生成DTO类,无论您使用的是默认代码生成模型,还是Microsoft的POCO模板。自动生成的DTO在UI或服务层中使用非常方便,并且您不必在使用层中引入Entity Framework的依赖项。从您的实体对象中获取DTO也非常容易。
var people = from p in context.People select p;
return people.ToDtos();
可能值得一看(无耻的自我推销)。
如果你需要/想要坚持使用LINQ to SQL,那么谷歌搜索“linq to sql POCO”,似乎有些人已经取得了一定程度的成功,但大多数搜索结果似乎来自2008年及之前,所以我不确定货币/相关性。
答案 1 :(得分:1)
将表拖动到设计器时生成的所有类都创建为部分类。没有理由你不能只为每个文件创建一个文件并使用它来进行必要的修改。
答案 2 :(得分:1)
如果你使用T4模板进行L2S - http://l2st4.codeplex.com/
,你绝对可以您仍然使用.DBML文件,但您需要在文件上将“build action”设置为“none”以关闭生成的默认代码的编译。然后从codeplex下载中添加.tt文件和.ttinclude文件。
T4模板中包含一行代码,您可以根据自己的需要进行修改:
FilePerEntity = false, // Put each class into a separate file
奇怪的是,实体框架4也使用这种方法,从模型文件生成代码的双重方法,但使用EF,VS2010包含T4模板。使用Linq-to-sql,您必须单独下载T4模板。使用T4的好处是你可以随时添加其他自定义。但是,最初生成的代码与从.DBML设计器获得的代码完全相同。