Guys正在开发一个Asp.Net MVC项目,该项目已经使用存储库模式从MS SQL Server数据库中获取数据。
我现在打算将Entity Framework用于我们项目的一些新的特殊要求,而不会干扰旧的存储库逻辑。 我使用了EF Power工具Beta 3和Reverse Engineered来自Visual Studio的数据库表,但是生成的类与我现有的一些存储库类冲突,这些存储库类与数据库中的相应表具有相同的名称,使得项目无法编译。 我查看了this教程
但这告诉我们将“tbl”前缀附加到表名而不更改生成的类名。 然而,我自己试图在模板中更改生成的类名(存在于CodeTemplates \ ReverseEngineerCodeFirst下) 但他们仍然会产生冲突。
我的问题是我应该怎样做才能达到预期的结果(与项目中现有的课程没有冲突),或者我应该采取其他一些替代方案?谢谢你的帮助。
答案 0 :(得分:1)
我不知道如何让工具执行您的要求,但是如何更改生成的文件中的命名空间,所以重复的名称无关紧要?
答案 1 :(得分:0)
好的,考虑到@jlew的建议,我找到了一个解决方法,是的,它点击了:
这是:
首先,我通过从以下链接下载的自定义模板覆盖了在“CodeTemplates / ReverseEngineerCodeFirst”文件夹下生成的默认模板:
http://romiller.com/2012/05/09/customizing-reverse-engineer-code-first-in-the-ef-power-tools/
(注意:这样做是为了使用数据注释进行配置,而不是使用Fluent API,以便使用数据注释完成列和表映射。有关详细信息,请参阅上面的链接。)
然后我做了以下事情:
在Context.tt文件中替换
using <#= code.EscapeNamespace(efHost.MappingNamespace) #>;
namespace <#= code.EscapeNamespace(efHost.Namespace) #>
与
<#
var hostMapNamespace = code.EscapeNamespace(efHost.MappingNamespace);
hostMapNamespace = hostMapNamespace.Replace(".Models", ".ModelsEF");
var hostNamespace = code.EscapeNamespace(efHost.Namespace);
hostNamespace = hostNamespace.Replace(".Models", ".ModelsEF");
#>
using <#= hostMapNamespace #>;
namespace <#= hostNamespace #>
2-在Entity.tt文件中替换
namespace <#= code.EscapeNamespace(efHost.Namespace) #>
与
<#
var hostNamespace = code.EscapeNamespace(efHost.Namespace);
hostNamespace = hostNamespace.Replace(".Models", ".ModelsEF");
#>
namespace <#= hostNamespace #>
3-在Mapping.tt文件中替换
namespace <#= code.EscapeNamespace(efHost.Namespace) #>
与
<#
var hostMapNamespace = code.EscapeNamespace(efHost.Namespace);
hostMapNamespace = hostMapNamespace.Replace(".Models", ".ModelsEF");
#>
namespace <#= hostMapNamespace #>
简而言之,我在自定义模板中稍微更改了命名空间生成,以避免与任何现有项目类冲突,特别是在Models命名空间中。好事是......它有效!