Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Reverse Engineer: Better support for namespaces #3988

Open
Tracked by #22948
roji opened this issue Dec 6, 2015 · 38 comments
Open
Tracked by #22948

Reverse Engineer: Better support for namespaces #3988

roji opened this issue Dec 6, 2015 · 38 comments
Assignees
Labels
area-scaffolding needs-design punted-for-2.0 punted-for-7.0 Originally planned for the EF Core 7.0 (EF7) release, but moved out due to resource constraints. type-enhancement
Milestone

Comments

@roji
Copy link
Member

roji commented Dec 6, 2015

Table schemas don't appear to make it into scaffolded entity code in any way; If I have two tables named Users in schemas A and B, the reverse engineering process will simply created Users and Users1 inside the reverse-engineering namespace. This don't seem to be a very satisfactory result.

I think the expected result is probably to map non-default database schemas (i.e. non-dbo in SqlServer) to namespace underneath the reveng namespace. So, assuming we're reverse-engineering to namespace Models, dbo.Users would get scaffolded to Users.cs, while schema2.Users would get scaffolded to Models.Schema2.Users.

@lajones
Copy link
Contributor

lajones commented Dec 7, 2015

You should get either the [Table] attribute on the POCO class or the equivalent fluent API ToTable() in the context OnModelCreating() method saying what the underlying schema/table name are. Please let me know if you're not seeing this.

I know we've discussed before having the schema in the namespace and decided not to. I'm not sure if this was just to stay consistent with what EF6 did or whether there are other reasons. @rowanmiller do you remember?

@rowanmiller
Copy link
Contributor

We should re-discuss this, it was one of the biggest complaints about reverse engineer in EF6.

@rowanmiller rowanmiller changed the title Reverse-engineered schemas not present in scaffolded code Reverse Engineer: Entity namespaces for database schemas Dec 8, 2015
@rowanmiller rowanmiller added type-enhancement help wanted This issue involves technologies where we are not experts. Expert help would be appreciated. labels Dec 8, 2015
@rowanmiller rowanmiller added this to the Backlog milestone Dec 8, 2015
@rowanmiller
Copy link
Contributor

Discussed and agreed that this would be good. We could detect if you have multiple schemas and start doing sub-folders/sub-namespaces automatically... or we could just have a flag that you supply.

For the moment, we are just ok with the trivial algorithm we have. If we require the flag when we implement this, then we should write a warning telling folks about the flag.

@lajones
Copy link
Contributor

lajones commented Dec 11, 2015

Note: the "DB schema translates to C# namespace" suggestion was also made as part of #3861 (and many other places I'm sure).

@connde
Copy link

connde commented Feb 2, 2016

Hope this get developed soon :) It will make it lot easier when generating contexts with different schemas.

@rowanmiller rowanmiller added pri0 and removed help wanted This issue involves technologies where we are not experts. Expert help would be appreciated. labels Apr 29, 2016
@rowanmiller rowanmiller modified the milestones: 1.0.0, Backlog Apr 29, 2016
@rowanmiller rowanmiller modified the milestones: Backlog, 1.0.0 May 9, 2016
@olavorn
Copy link

olavorn commented Jul 5, 2016

@rowanmiller Hi,

In addition to @roji's, another (more general I guess) aproach also making use of a parameter
-ContextNamespace, cause even if they may be stored in subfolders, it would be usefull to override the default namespace in the command for general purposes. Ex:

I want to scaffold all tables into Model\Design :
This makes much sense, since I want to keep Model root folder to adaptations and extensions to the scaffolded Model (wich EF also suggests by design while defining classes as partial).

Scaffold-DbContext (...) -OutputDir Model\Design will generate on namespace <project>.Models.Design. ...Too Bad :(

the goal is not only to have a parameter we can use to place the files into a folder (-OutputDir), but also another parameter to define the context namespace. In this case:

Scaffold-DbContext (...) -OutputDir Model\Design -ContextNamespace <project>.Models...

This would output in Models\Design files with namespace '.Models'.

@roji's scenario would be accomplished with something like this:

Scaffold-DbContext (...) -OutputDir Model\Schema -Schema <schema> -ContextNamespace <project>.Model.<schema> in the core, iterating thru the schemas ....

@roji
Copy link
Member Author

roji commented Jul 5, 2016

@olavorn your suggestion seems like a separate issue - allowing users to control the namespace separately from the OutputDir isn't the same as asking for schemas to be automatically translated into C# namespaces (even if it your feature proposal would provide a clunky manual workaround). I'd open a separate issue on this.

@olavorn
Copy link

olavorn commented Jul 5, 2016

@roji I agree with you, but before that, seems to me a good idea to exaust this a little bit here; As for the clunky workaround, the last example I put was more like an implementation suggestion for your feature, but it could alse be wrapped all up in a single flag like :

Scaffold-DbContext (...) -OutputDir Models -ContextNamespace <project>.Models -SchemaHierarchy [single|subfolders]

Like that, impact on the current feature may be minimun..

@jmevel
Copy link

jmevel commented Oct 24, 2016

I totally agree with @olavorn's idea. Now I only have 2 choices:

  • Change my partial classes' namespace to the one of my Scaffolded models (I want the other way)
  • mix all my partial classes together (Scaffolded and non-Scaffolded)

I like none of these choices, I would much prefer be able to specify the namespace of my Scaffolded models so I could store my partial classes in separate folders

@adayIvey
Copy link

i would also like to be able to define my namespace when scaffolding the db, has there been any traction with this?

@divega
Copy link
Contributor

divega commented Dec 21, 2016

@Aday12345 This issue is in our backlog milestone. That means we don't have immediate plans to work on it. I am however clearing up the milestone to re-discuss the priority. If anyone wanted to make a contribution here, we would be happy to consider it too.

@AceCoderLaura
Copy link

I'm probably going to have to override CSharpEntityTypeGenerator to do this, but I'd much prefer it be part of EF Core because I'm not sure how I'm going to get the folders working.

@MrNunUther

This comment was marked as spam.

@ajcvickers

This comment was marked as spam.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area-scaffolding needs-design punted-for-2.0 punted-for-7.0 Originally planned for the EF Core 7.0 (EF7) release, but moved out due to resource constraints. type-enhancement
Projects
None yet
Development

No branches or pull requests