How do I adapt the Entity Framework POCO T4 templa

2019-04-14 04:19发布

I like to to keep my code first - or T4 generated - POCOs in a project separated from the DbContext. This helps me ensure my entity classes aren't coupled to any one data access service.

When I create a new DB first EDMX model, the wizard generates a T4 template to generate all the POCOs in the same project as the DbContext. How can I modify this template to add classes to a separate project?

On closer inspection, it would probably be much easier to move the DbContext to a new project, but the T4 for this has no call to fileManager.StartNewFile so i don't know where to begin telling it to create a file elsewhere.

2条回答
走好不送
2楼-- · 2019-04-14 04:32

Id say:

1.- Create a file in your model project (MyProject.Model proyect), a .tt file with your desired name... (MyModel.tt for this example)

2.- Go to DAL proyect, open the WhateverModel.tt file and copy the content to MyModel.tt...

3.- Delete WhateverModel.tt form DAL proyect.

4.- Look in MyModel.tt for:

const string inputFile = @"WhateverModel.edmx";

5.- And replace it with:

const string inputFile = @"..\TheRelativeRouteToYourEdmxFileGoesHere.edmx";

6.- And... Run custom tool to generate your model.

Note: 7.- For sure you will have to change few using directives and namespaces but it works for me.

查看更多
我命由我不由天
3楼-- · 2019-04-14 04:38

You can exclude the .tt file from your DAL project and then add it as a link in another project.

This means you won't have to alter the template as it can see your model.

The files produced when you run the template will be included in your data objects assembly, although the physical files will be in your DAL project.

The only downside is that you will have to manually run the custom tool when you update your model.

查看更多
登录 后发表回答