我想我的實體框架模型生成實體與internal
訪問修飾符,而不是public
。我在庫中使用EF模型,我只想從外部訪問一個類(某些控制器)。如何讓所有的實體訪問:在EDMX內部而不是公開?
有什麼簡單的方法可以讓EF模型生成使用internal
修改而不是public
,包括更新時的模型更新?
我想我的實體框架模型生成實體與internal
訪問修飾符,而不是public
。我在庫中使用EF模型,我只想從外部訪問一個類(某些控制器)。如何讓所有的實體訪問:在EDMX內部而不是公開?
有什麼簡單的方法可以讓EF模型生成使用internal
修改而不是public
,包括更新時的模型更新?
這很像我在similar question上得到的那種。但在你的情況下,你想要自定義類的訪問修飾符,而不是ObjectContext。
HVD的回答後改編:
設計者有一個選項「添加代碼生成項目」。如果你使用這個,你會得到幾個選擇。我使用的是「ADO.NET自我跟蹤實體生成器」,但同樣的方法適用於所有人。選擇此項將向模型文件添加兩個模板文件(Model.tt和Model.Context.tt),您可以根據自己的需要自由修改它們。對於你問的修改,你會在或接近行37.更改
<#= Accessibility.ForType(實體)#> <#= code.SpaceAfter找到一個代碼生成實體類(code.AbstractOption(實體))#>部分類...
到
部分類...
對於複雜類型,下面還有類似的行:在「部分」之前也刪除零件。
這將一次設置所有類型的訪問修飾符,包括將來的類型。要定製各種類型,最好使用模型瀏覽器。
您必須將模型本身的屬性「實體容器訪問」設置爲internal,否則將生成具有不兼容訪問修飾符的成員。
當然,在模型瀏覽器窗口中選擇> EntityTypes
,並在你的類型在屬性窗口中訪問修飾符設置。您還應該在EntityContainer> EntitySets中修改set的修飾符,就好像該類型是內部的,該集合至少也應該是內部的(默認爲public)。
可以選擇使用T4模板,在這裏你可以直接修改正在生成的修改訪問。
我希望我的實體容器以及生成的複雜類都是內部的。首先,我將「實體容器訪問」設置爲內部。接下來,在初始化itemCollection變量後,我在「Model.tt」文件的頂部添加了一個容器變量。我在「Model.Context.tt」文件中找到了容器變量代碼。
var itemCollection = new EdmMetadataLoader(textTransform.Host, textTransform.Errors).CreateEdmItemCollection(inputFile);
var container = itemCollection.OfType<EntityContainer>().FirstOrDefault();
接下來,我改變了
<#=Accessibility.ForType(complex)#> partial class <#=code.Escape(complex)#>
到
<#=Accessibility.ForType(container)#> partial class <#=code.Escape(complex)#>
我選擇要修改這樣的代碼,這樣我可以保持我的複雜的類容器訪問修飾符同步與容器訪問修飾符。
謝謝Gert Arnold爲我帶來正確的方向。
我知道屬性窗口,但它不允許我選擇多個實體並同時設置其訪問修飾符。我必須一個接一個地做。我想我需要看看T4模板。 – 2012-03-01 12:36:38
用XML編輯器(這是一個普通的XML文件)打開EDMX文件並在那裏進行批量替換。在20秒內完成。 – 2012-03-01 20:45:08
是的,我正在尋求一些更持久的解決方案(修改器不會被代碼更新所替代),但也沒關係。 – 2012-03-01 21:28:23