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

EntityFramework.* packages renamed to EntityFramework7.* & meta-package removed #42

Closed
bricelam opened this issue Jul 14, 2015 · 84 comments

Comments

@bricelam
Copy link

In Beta 6, the Entity Framework packages have been renamed to EntityFramework7.*. The meta-package EntityFramework has also been removed. For more information, see NuGet Package Naming and dotnet/efcore#2508.

This issue has been locked to avoid spamming folks subscribed to this repository. Please use dotnet/efcore#2508 for any further discussion.

Update (we reverted this change)

Thanks for all the feedback. We discussed this at length and ultimately decided to revert this change (thus removing the major version from the package names). While we have not been able to come up with any concrete scenarios where the major-version-in-name approach was broken, and there does seem to be value in preventing inadvertent upgrades across major version boundaries, we ultimately agreed that we shouldn't try and do anything special in EF to solve this.

BTW it is worth noting that providers may choose to still use a different package name for each EF major version (in fact some already do this for EF5/6). We will leave this decision up to individual provider writers to do what they feel is best.

@terryt2000
Copy link

omg, thank you! +1000

@scionwest
Copy link

Doesn't including the major version number in the package name defeat the whole point of using SemVer?

It always felt better to me just typing out the package I want, and not worrying about what version is in the title. I would think the major version of the package would be 7.0.0-beta6

@bricelam
Copy link
Author

@scionwest I agree that it's a little unorthodox, but please read NuGet Package Naming for our rationale.

@scionwest
Copy link

@bricelam I did and I understand the point behind it. I had read elsewhere (or watched via standups) that you guys were wanting to use SemVer as your version spec for things. In this scenario, for all nuget packages, you're not adhering to that spec. Conditionally adhering to different specs makes versioning more complex than it needs to be.

Imo one spec should be chosen and used for everything. Either nuget or SemVer.

@LordZoltan
Copy link

Yeah, no, I agree completely with the rationale on this - ef7 is not ef6, and anybody accidentally upgrading from one to the other is going to get very confused - it's a defensive measure - but one I agree with.

@terryt2000
Copy link

@scionwest I don't read that as applying across all Nuget packages, just EntityFramework (although I might have missed something) The important piece here is allowing the coexistence of EF6 and EF7 in the same solution. This was a significant sticking point me having libs that use EF6 calling complex stored procs, and wanting to use Identity 3.0 with EF7. Had to do a bunch of workarounds to implement everything in EF7. Not sure it applies everywhere but it makes good sense to me here, and I honestly don't see where it introduces any complexity. As the post stated, upgrading major version #s should be a conscious decision, so groking the package naming is the least of your worries.

@akoeplinger
Copy link

I read your rationale and understand why you're doing it, but I feel like at this point the version number stops providing anything useful and you might be better off with EntityFramework2015 or even EntityFrameworkMagicUnicorn 😄

@Bartmax
Copy link

Bartmax commented Jul 14, 2015

This suggests that EF7 is a different product than EF6. Which is kind of right, that's why there were some discussion about changing the name completely.

So talking about SemVer, which I agree with @scionwest I don't think they are breaking SemVer exactly but if the product name is EF7 right now, sticking to SemVer then you can versioning like EntityFramework7 : 1.0.0-beta6 (for example) instead of version 7.x.x, does this make sense?

So you can have, EntityFramework: 6.x and then EntityFramework7 : 1.0.0-beta6 (is like calling EntityFramework Sequel or 2, it doesn't matter).

With this, you can still have major releases and also breaking changes like EF7: 2.x when it makes sense OR if fits better to break lot of stuff and providers then you can roll out EF8, EF9, EFX (ala apple) using SemVer for all products.

When new 'version' of ef can be considered a new product? There can be a lot of things, but when you see that someone might want to use EFA with EFB in the same project I think that's a good indication of that. Like what's going on currently with EF6 and EF7.

What I see that can be confusing is this 6 - 7 thing. If this was EF and EFS or EFX or new name (which I do ask for consideration) wouldn't be a problem. But as soon as you start seeing EF7 (or EFWhatever) as a new product, this makes sense a lot.

@Bartmax
Copy link

Bartmax commented Jul 14, 2015

EntityFrameworkReborn 👶

@terryt2000
Copy link

@Bartmax ugh, lol

@bricelam
Copy link
Author

See also EF7 – v1 or v7? (especially the So, is it a v1 or a v7? section)

@daveaglick
Copy link

I think @Bartmax hit the nail on the head. The "6" vs "7" isn't being used as a version number so much as a product identifier. It's like with Windows 8 vs. Windows 10 - the latter is not merely a new version of the former, it's a whole new product. With that perspective, I think using the 7 (or 8, 9, etc.) in the package name makes perfect sense.

@dmccaffery
Copy link

I don't like this idea, either. I understand the interest in allowing multiple versions of EF to exist within the same AppDomain, but that has to do purely with the name of the assembly; not the package itself.

I have always been a proponent of using --safe when updating packages, which should ensure that updating packages won't break the build. This is the entire point of SemVer, in that the version is semantic in its meaning. The fact that NuGet, and DNU by proxy, both update to latest by default is unfortunate. It should update to the latest safe version by default, which would allow SemVer to be used the way it's intended. Updating to an unsafe (latest) package should require an additional argument (like --latest) at the CLI, or an additional option in the package manager.

Breaking the semantics to make it easier seems to be a crappy work around to the way most package managers work, including NuGet. This is a client issue, not an administrative packaging issue.

I don't mind having meta packages if it makes it easier to find things, but that also seems to be a disadvantage in that discovery of newer versions of EF is also harder.

@dmccaffery
Copy link

dmccaffery commented Jul 14, 2015 via email

@rowanmiller
Copy link

We aren't really moving away from SemVer, but we are moving away from having every version of the product be listed as versions of the same package. I guess you could argue that technically our NuGet package doesn't really follow SemVer... but all up EF does. For example, we won't have v2 of EF7, if there are breaking changes to EF7 it will become EF8.

I agree that having different packages isn't ideal... but it's kind of a side effect of how .NET and NuGet work. We want folks to be able to use two major versions side-by-side in the same project and we don't want folks to be inadvertently upgraded to a new major version (with breaking changes) when they upgrade their packages.

@jods4
Copy link

jods4 commented Jul 14, 2015

I have read Naming article but I'm sorry to say I didn't find any good reason for that move.

You build a whole new platform and versioning story around semver and you are the first to break it before it even ships. Nicely done.

BTW: what is the next version going to be called? EF8 v1.0 ? EF8 v8.0? EF7 v8.0? That's non-sense.

@terryt2000 I use Identity 3.0 as well, but I am not ready to take a dependency on EF7 yet. All you have to do is not use Microsoft.AspNet.Identity.EntityFramework and replace it with your own EF6 stores. It works perfectly. Mixing EF6 and EF7 in the same application is so ugly and such a bad idea. 😱

@jods4
Copy link

jods4 commented Jul 14, 2015

@rowanmiller Well yes you are breaking semver.

if there are breaking changes to EF7 it will become EF8.

Guess what, semver defines something for that: a major version bump. Clearly you don't want to follow semver but make up your own system.

Your arguments are very generic and could apply to any project... Imagine for a second a world where every package on Nuget follows the same system as you propose. Would that be good? If not what makes it OK just for you?

@shahid-pk
Copy link

@jods4 although i would also have liked if ef7 was given a different name, but come on their is still nothing to be so much angry about , and their is nothing that one should react like this.

@LordZoltan
Copy link

All this 'following semver to the letter' is great in theory; but I can tell you the majority of developers out there, using .Net (and also most of who, won't even be aware of ef7s existence yet) don't consider that a major version bump imp;ies breaking changes or, at least, loss of functionality either.
'Itz wrongz' is all very well and good, but there has to be some pragmatism - just because you're fully aware of semver and all its side0effects, doesn't mean everyone is. Also, EF has struggled enough with getting traction in many workplaces - allowing the new build to run side by side will encourage it to continue to do so.

@scionwest
Copy link

@rowanmiller

I agree that having different packages isn't ideal... but it's kind of a side effect of how .NET and NuGet work. We want folks to be able to use two major versions side-by-side in the same project and we don't want folks to be inadvertently upgraded to a new major version (with breaking changes) when they upgrade their packages.

I disagree. It's not a side-effect of how .NET and NuGet work. It's a side-effect of the design choice the ASP.net team have made on the overall product. I haven't personally done much with NuGet, so I'm not 100% sure on this. Can't you have different assembly names (ef6 & ef7) while keeping the same package name? I don't see how that causes conflicts with running different versions of EF side-by-side, unless NuGet isn't smart enough and just replaces the previous package of the same name.

Eitherway, I don't think supporting side-by-side versions of EF is something that should be a goal here. You don't try and run the different versions of .NET in the same project (same solution sure; not the same project), nor have I ever seen anyone try to run different versions of the any other framework side-by-side in one project. This doesn't feel like a valid reason to break a spec.

EF 6 to EF7 is not a whole new product. It's the same person, different clothes. EF7 with a SemVer of 1.0 doesn't jive well. SimVer spec reads as

Major version X (X.y.z | X > 0) MUST be incremented if any backwards incompatible changes are introduced to the public API.

This fits the bill of EF7.

In response to @daveaglick

It's like with Windows 8 vs. Windows 10

This is Apple and Oranges. The actual version number of Windows 8 is not, 8.0. It is 6.3. Windows 8 is a marketing name. You can apply "Entity Framework 7" in the marketing material, that's not the issue. When referencing it as a package though, it should follow the spec. "EntityFramework":"7.0.0-beta6"

@scionwest
Copy link

@shahid-pk No anger here. Just expressing my opinion that breaking semantics in this scenario is something I disagree with.

@rowanmiller
Copy link

@jods4 don't get me wrong, I'm definitely not suggesting that this is the ideal approach. The ideal would be that NuGet makes upgrading across a major version an explicit opt-in step and the CLR allows two versions of the same product to be used within an app.

I also realize I'm probably not going to change your mind... but here are a few thoughts.

if there are breaking changes to EF7 it will become EF8.

Guess what, semver defines something for that: a major version bump. Clearly you don't want to follow semver but make up your own system.

I think there are two aspects we're discussing here - product versioning and installer/packaging. And I agree that ideally they would be the same thing. http://semver.org doesn't have any hard guidelines around how a product is distributed or packaged. EF6.1.3 is a patch release with no breaking changes compared to EF6.1.2. EF7.0.0 is a breaking change release compared to EF6.1.3. EF7.0.1 will be a patch release with no breaking changes to EF7. This all clearly follows the guidance of SemVer. I don't think the fact that EF6 and EF7 are different NuGet packages means we are ditching SemVer altogether.

@jods4
Copy link

jods4 commented Jul 14, 2015

@shahid-pk sorry if it came out very angry, which I'm not. BTW I'm not a native English speaker.

In the end, it won't make a big difference, for me anyway. I'm going to reference the EF7 package and that's it, not much changed.

MS has a long tradition with versioning problems, I guess old habits die hard. I mean just look at the .net version numbers there's just no sense behind them.

Maybe calling EF7 something else would have made more sense. Saying you're going to create your own versioning scheme by moving the major version number from the "version" to the "name" is just weird.

@scionwest
Copy link

@rowanmiller You're package version or EF 7 is not 7.0.0/7.0.1 though. It is 1.0.0, which does break the SemVer spec. I completely agree with:

EF6.1.3 is a patch release with no breaking changes compared to EF6.1.2. EF7.0.0 is a breaking change release compared to EF6.1.3. EF7.0.1 will be a patch release with no breaking changes to EF7.

That was one of my points. Your nuget package is still 1.0.0 though, which doesn't fit what you just described.

@rowanmiller
Copy link

Hey,

You're package version or EF 7 is not 7.0.0/7.0.1 though. It is 1.0.0, which does break the SemVer spec.

No, it's still 7.0.0/7.0.01.

~Rowan

@joaroyen
Copy link

Hey guys,

This is an announcement repo which many people are watching and maybe you should move the discussion into https://github.com/aspnet/EntityFramework/issues instead?

@scionwest
Copy link

@rowanmiller Ah, well some how I missed that. The major version being the framework name still bugs me but not nearly as bad as resetting the version number like I originally thought was happening. Thanks for the clarification.

@mcquiggd
Copy link

@ErikEJ - well, then if parrallel development is going to continue for any length of time, then I guess I will be looking forward to EF 6.9.99.999 ;-)

But... I am sure we are all smart enough to deal with it, even if doesn't suit our delicate sensibilities...

Right, off to deal with more important problems....

@davidfowl
Copy link
Member

The real problem here is nuget. The whole thing has some really major
flaws, especially regarding to versioning and platform management. Unlike
other package managers / dependency management tools, there are no
conventions to specify a range or pattern of accepted versions. Even if you
go ahead and maybe fix the issue with unwanted updates to EF7, you just
create a whole mess in naming for basically nothing: As soon as you release
a new build (say EF7.1) where interfaces have been touched, nuget will
break applications as soon as they update.

Yu want NuGet to install 2 versions of the same package into a project? Can you give examples of other package managers that do that by default? How does apt-get do it? gems? Do they all support this?

@rowanmiller
Copy link

@mcquiggd

@ErikEJ - well, then if parrallel development is going to continue for any length of time, then I guess I will be looking forward to EF 6.9.99.999

I don't know if we'll get to EF6.9, but we may. I doubt we'll release 999 patches on the 99th minor version though. Seems much more likely we would have released 6.10.0 before patching the thing that much 😄

@mcquiggd
Copy link

@rowanmiller - And then the arguments would start that it is breaks some Feng Shui like concept and a proportion of people would be offended... maybe release notes should also be Haiku... 😄

Anyway, really have to go and do something useful - best of luck to all, and don't get too stressed...

@haneytron
Copy link

62 e-mails to my inbox in just over 24 hours. I thought that this was the ASP.NET Announcements repo, not the ASP.NET Bikeshedding Debates repo. Please everyone - take it to the appropriate repos, not this. I need to unsubscribe if this continues. I just want to know about changes, not how everyone feels about changes!

@rowanmiller
Copy link

@Ironyx @joaroyen I think this is an ok place to discuss the announcements and provide feedback. There is an Unsubscribe button in the right menu if you want to mute this particular thread.

@dmccaffery
Copy link

That's not entirely true. NuGet does have range identifiers, just not through the UI (as far as I know). You use a square bracket for mutually inclusive and and parentheses for mutually exclusive:

For example:

[1.0,2.0)

That would include all version under 2.0 but greater or equal to 1.0.

On Jul 15, 2015, at 9:13 AM, artganify <notifications@github.commailto:notifications@github.com> wrote:

This whole discussion is extremely stupid. I don't really care about EF7
being a completely new framework and whether it should be called EF v1 or
whatnot. After all, it's just a product and as it is common with software
versioning: 1.0 to 2.0 mostly means ground-breaking changes while 1.0 to
1.1 implies new features, patches or fixes. If you guys want to break with
consistency and common conventions and essentially give up semver, go
ahead. I expect a name change to "EntityFrameworkNT-ExtendedEdition2015"
within the next commit.

The real problem here is nuget. The whole thing has some really major
flaws, especially regarding to versioning and platform management. Unlike
other package managers / dependency management tools, there are no
conventions to specify a range or pattern of accepted versions. Even if you
go ahead and maybe fix the issue with unwanted updates to EF7, you just
create a whole mess in naming for basically nothing: As soon as you release
a new build (say EF7.1) where interfaces have been touched, nuget will
break applications as soon as they update.

My suggestion:

Make a step back, rethink the whole thing again and talk with the guys
responsible for nuget development about fixing their stuff. It might delay
the release of EF, but at least we don't have to deal weird naming,
inconsistent versioning etc. You guys already mentioned you don't want to
create a broken release just for the sake of being aligned with the release
of vnext/vs2015. So then do it. Take your time and do your stuff good, not
fast.


Reply to this email directly or view it on GitHubhttps://github.com//issues/42#issuecomment-121664873.

@haneytron
Copy link

Here's what I suggest per Dave Glick. @davidfowl, @bricelam, and @DamianEdwards I hope you're listening.

When you announce stuff here in the future

  • Post the announcement as an issue (like today)
  • Immediately lock/close the issue so that people cannot comment here
  • Link in this announcement issue to an issue in the relevant repo (in this case the EF repo) where people can discuss it

I subscribe here to see what changed. I literally, completely, totally care 0% how people feel about the changes in the context of this repo. I would like to see the discussions and debates in the relevant repo. Just think of the hordes of people who follow the EF repo who have no idea that this debate is raging on right now.

Thanks for listening.

@upta
Copy link

upta commented Jul 15, 2015

@Ironyx Is absolute right. I'm honestly ready to unsub from this repo because of the couple of threads like this that have exploded into a million email notifications

@scionwest
Copy link

You can unsubscribe from the single thread.

@keichinger
Copy link

@rowanmiller the thing about the unsubscribe button is: it is not working at all. You still get your activity feed spammed and e-mails about every single response. I've cried at GitHub plenty of times about this problem but they never responded.

Other than that I completely agree with @Ironyx

@jacobrillema
Copy link

This should work for versioning but not sure if this will solve the same package installed at different levels. Not sure if assembly redirection would work but I know nuget can add that in to web.config or app.config. Probably best bet is to break them up since they do seem like separate products at this time when you compare feature levels. Just my 2 cents.

Get-Project -All | Add-BindingRedirect

package id="SomePackage" version="2.1.0" allowedVersions="[2,3)"

@NotMyself
Copy link

I think there might be a technology solution to the inbox issue.

@csharpfritz
Copy link
Member

@artganify @davidfowl

NuGet already supports constraining version upgrades: http://docs.nuget.org/Create/Versioning#constraining-upgrades-to-allowed-versions

@luisrudge
Copy link

@csharpfritz exactly. This is enough to solve this specific issue.

@miguellira
Copy link

@artganify as @csharpfritz has pointed out - this can be achieved.

Though the tooling support for upgrading to a major NuGet version can be improved, I'd wager the desire to run both EF6 and EF7 side-by-side is the main impetus for this change. I mean, really, who "inadvertently" upgrades EF?

Anyway, it's unfortunate this SxS requirement has been given such precedence but the renaming seems like the most logically choice and from the links already provided it appears the EF team have been mulling this over for some time.

@rowanmiller
Copy link

@miguellira

I mean, really, who "inadvertently" upgrades EF?

Most likely to happen when someone is using EF6.1.3 and we release EF6.2.0. They run Update-Package and get automatically upgraded to EF7.0.0. They then need to undo that and run Update-Package -Version 6.2.0.

@rowanmiller
Copy link

BTW I should add that everything being discussed here is exactly the conversation we had internally when talking about this change. Academically it feels wrong to use a different package name for different versions. But pragmatically it works - always upgraded within you major version, explicit step to swap to a new major version, ability to run multiple major versions side-by-side.

@miguellira
Copy link

@rowanmiller IMHO a message indicating the major breaking change and guidance on how to undo and upgrade to 6.2 as you succinctly put it would have sufficed. Running Update-Package (which I often do) is always a gamble and devs should expect bad things to happen.

That SxS requirement though. Ugh.

Anyway, keep up the great work, looking forward to all the new bits.

@terryt2000
Copy link

I agree with you Rowan. To me, naming/versioning conventions are important only to the point where they communicate clearly enough to be understood and don't provide obstacles to solving problems. I don't really care about the package names themselves as long as they are documented. As @mcquiggd, so eloquently put it above "I am sure we are all smart enough to deal with it, even if doesn't suit our delicate sensibilities..." or we wouldn't be here in the first place.

Thank you and the team for providing a solution to a problem (major versions side-by-side) that might not be ideal in a perfect world, but exists for many devs who want/need to incrementally port asp.net solutions over to EF 7.

@rowanmiller
Copy link

For the sake of keeping this thread up to date... discussed with @csharpfritz offline and agreed that it's not because NuGet doesn't support constraining to major version... it's just not the default experience (and the default experience will be the experience for 90-something-percent of our customers). Maybe we can improve that in the future and then we can always add 7.x.y versions of the main EntityFramework package that just pull in the required components.

@Mpdreamz
Copy link

@csharpfritz

NuGet already supports constraining version upgrades:
http://docs.nuget.org/Create/Versioning#constraining-upgrades-to-allowed-versions

I hope thats not the end of the story, the people who know how to add a constraint are not the folks getting bit by an inadvertent upgrades to a new major version. One could argue nuget should add the constraint when installing packages, or even interpret a dependency version without constraints as having the same major version constraint by default.

as @rowanmiller points out:

Most likely to happen when someone is using EF6.1.3 and we release EF6.2.0. They run Update-
Package and get automatically upgraded to EF7.0.0. They then need to undo that and run Update-
Package -Version 6.2.0.

The nuget UI should warn that the displayed version is a major upgrade and maybe do a better job at showing not just the latest version in the updates tab but all newer versions. The command line could translate latest to mean latest within major version, inform there is also a major version update and use a force flag to upgrade to that. Now the user story on the commandline is the opposite of this.

@luisrudge
Copy link

If the nuget UI was open sourced, this would already be fixed :)

@miguellira
Copy link

I don't get the whole chatter about improving NuGet. Improving NuGet tooling can happen, it should happen, and it probably will happen. The point still remains there is a desire by many to run EF6 and EF7 SxS with and without feature parity. As long as that continues to be on the agenda the name change is inevitable.

I wonder how many people would still consider pulling in a second ORM into an EF6 solution if it was called say... NTTFx.

@Mpdreamz
Copy link

Because its a package manager problem, upgrades from EF7 to EF8, EF9, EF10 will no longer be discoverable through nuget in the future. Installing a major version for EF using nuget works completely different then packages without SxS requirements. Changing the name because it works right now feels short sighted and sets a precedence for packages, EF being the popular package that it is.

In the interest of all those subscribed I'll drop it though.

@ghost
Copy link

ghost commented Jul 15, 2015

Could you please move this discussion somewhere to https://github.com/aspnet/EntityFramework/issues
This repo is used for aspnet vnext announcements and many people are using it, this discussion clearly spam our mailbox, thanks.

@aspnet aspnet locked and limited conversation to collaborators Jul 15, 2015
@rowanmiller
Copy link

This issue has been locked to avoid spamming folks subscribed to this repository. Please use dotnet/efcore#2508 for any further discussion.

@rowanmiller
Copy link

Hey All,

Thanks for all the feedback. We discussed this at length and ultimately decided to revert this change (thus removing the major version from the package names). While we have not been able to come up with any concrete scenarios where the major-version-in-name approach was broken, and there does seem to be value in preventing inadvertent upgrades across major version boundaries, we ultimately agreed that we shouldn't try and do anything special in EF to solve this.

BTW it is worth noting that providers may choose to still use a different package name for each EF major version (in fact some already do this for EF5/6). We will leave this decision up to individual provider writers to do what they feel is best.

~Rowan

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests