1

夥計們正在處理一個Asp.Net MVC項目,該項目已經在使用存儲庫模式從MS SQL Server數據庫獲取數據。如何更改生成的類名使用實體框架生成電動工具

我現在打算在不干擾舊的存儲庫邏輯的情況下,使用實體框架來滿足我們項目的一些新的特定需求。 我已經使用EF Power工具Beta 3和Reverse Engineered從Visual Studio中創建了我的數據庫表,但生成的類與我的一些現有的存​​儲庫類存在衝突,這些存儲庫類與數據庫中相應的表具有相同的名稱,導致項目無法編譯。 我看了this教程

但是,這說明了將「tbl」前綴附加到表名稱並且不更改生成的類名稱。 我自己卻試圖改變下CodeTemplates \ ReverseEngineerCodeFirst 模板生成的類名(存在,但他們仍然是有衝突的產生。

我的問題是我應該怎麼做才能達到我想要的結果(與現有的類沒有衝突在項目中)還是應該採用其他替代方法?感謝您的幫助。

回答

1

我不知道如何讓工具執行您所要求的操作,但如何更改生成文件中的命名空間,以便重複名稱沒關係?

0

好的,考慮到@ jlew的建議,我找到了一個workaroun d和是它點擊:

這就是:

首先我做的從下面的鏈接下載的自定義模板下的「CodeTemplates/ReverseEngineerCodeFirst」文件夾中生成默認的模板重寫:

http://romiller.com/2012/05/09/customizing-reverse-engineer-code-first-in-the-ef-power-tools/

(注意:這是爲了使用數據批註進行配置而不是Fluent API以及使用數據批註完成列和表映射。詳情請參閱上面的鏈接)。

然後我做了以下內容:

  1. 在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-在映射。TT文件替換

namespace <#= code.EscapeNamespace(efHost.Namespace) #> 

<# 
    var hostMapNamespace = code.EscapeNamespace(efHost.Namespace); 
    hostMapNamespace = hostMapNamespace.Replace(".Models", ".ModelsEF"); 
#> 
namespace <#= hostMapNamespace #> 

嗯,總之,我已經有所改變命名空間一代自定義模板,從而避免尤其是在型號命名空間項目的任何現有類的任何衝突。好東西是...它的工作原理!