如何使用代码生成实体模型?

时间:2012-08-24 07:52:07

标签: c# .net entity-framework

我需要使用代码重新生成Entity Model。每次发生变化时我都不会去right click and update model from database

所以我开始关注EdmGenEdmGen2

我使用EdmGen2为我预生成Model Views

using (System.Diagnostics.Process process = new System.Diagnostics.Process())
{
    process.StartInfo.FileName = @"C:\EdmGen2.exe";
    process.StartInfo.Arguments = @"/ViewGen cs ""C:\Project\EntityFramework\Model\ApplicationEntityModel.edmx""";
    process.StartInfo.WorkingDirectory = @"C:\Project\EntityFramework\Model";
    process.Start();
    process.WaitForExit();
}

这很有效。

不,我正在尝试重新生成Entity Model

using (System.Diagnostics.Process process = new System.Diagnostics.Process())
{
    process.StartInfo.FileName = @"C:\EdmGen2.exe";
    process.StartInfo.Arguments = String.Format(@"/ModelGen ""{0}"" ""System.Data.SqlClient"" ""ApplicationEntityModel""", ConnectionString);
    process.StartInfo.WorkingDirectory = @"C:\Project\EntityFramework\Model";
    process.Start();
    process.WaitForExit();
}

这只生成.edmx文件。无法指定名称空间,因此这对我不起作用。

我可以使用tooltemplate来完全重新生成Entity Model', this includes the。edmx and designer.cs`吗?

2 个答案:

答案 0 :(得分:2)

我获得了EntityStoreSchemaGenerator的源代码,并且能够对其进行编码。

您可以添加这些过滤器等,以限制所需的表格。还有这个疯狂的复数形式的东西,以确定何时从实体集合的末尾添加/删除“S”。对于一个单词以Status结尾的情况没有成功,虽然单数是Statu(我总是嘲笑那个),但我能够告诉它状态的复数是状态(即使这不正式并且状态的单数是状态。

代码在这里: http://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/30b10ed3-b705-458d-ae1f-19d595bceb39/

我找到了将所有文件合并到edmx中的类的代码。 http://fusioncrm.googlecode.com/svn-history/r5/trunk/Fusion.Data.Generation/ModelGenerator.cs

我写了一个控制台应用程序,它基于“黄金”数据库为客户端运行所有这些,我也讨厌从设计器运行它,因为它由于某种原因总是略有不同。这种方式似乎总是生成相同的文件,因此在对版本控制签入时更改的更清楚。

答案 1 :(得分:1)

这将要求您直接与Visual Studio交互(在后台运行它并命令它执行某些操作),因为自动生成类由Visual Studio的自定义工具处理,该工具必须在visual studio中运行。

此自动生成也很成问题,因为可能需要手动修复才能使EDMX正常工作。它们也可能是更改,它将以依赖代码不构建的方式更改生成的类。