[Closed] Entity Framework Core Feature Suggestions

This web site is no longer being monitored by the EF team at Microsoft.

We have decided to unify our feedback process to focus on our existing issue trackers over at GitHub.com. We are not planning to migrate the list of ideas posted here automatically, because some of these ideas and votes were submitted a long time ago and therefore the number of votes likely does not accurately reflect the current priority for customers.

You are welcome to re-submit your favorite ideas to our issue trackers. We only request that you first search for existing issues and try to avoid creating duplicates.

As an application,
I need to connect to an Azure SQL Server database using an AAD login/token from an EFCore application,
So that I can use .NET Core in a production environment.

As it is now, .NET Core is not ready for enterprise applications for companies that use Azure Active Directory (AAD). In order for Entity Framework Core to gain a larger audience it is imperative that it support all connectionstring options for Azure that it has supported for Integrated Security in on-premise instances.

Please make the time to implement this feature, it is important to the success of EFCore with Azure SQL Databases.

As an application,
I need to connect to an Azure SQL Server database using an AAD login/token from an EFCore application,
So that I can use .NET Core in a production environment.

As it is now, .NET Core is not ready for enterprise applications for companies that use Azure Active Directory (AAD). In order for Entity Framework Core to gain a larger audience it is imperative that it support all connectionstring options for Azure that it has supported for Integrated Security in on-premise instances.

Please make the time to implement this feature, it is important to the success of EFCore…

We use Oracle databases with different schemas for Train, Val, Prod, etc. for client installs, and even more schemas for internal Dev/Test databases (separate schemas for running manual tests, different schemas for different versions being developed/tested, etc.).

The current restriction of having to specify a specific schema in the model means that we straight up can't use Entity Framework.

We're able to log the commands that EF is executing, by setting a delegate on DbContext.Database.Log.

When you do this, you see "Started Transaction at ..." and "Committed Transaction at ..." messages.

From this, you'd think you could determine the duration of the transactions. You can't. When load becomes high enough for transactions to begin to overlap, there is no way to match the start and commit transaction messages.

We're able to manipulate the text of the messages that are being logged by deriving a class from DatabaseLogFormatter.

Within DatabaseLogFormatter.LogCommand() we have access to the DbCommand, and through DbCommand.Transaction to the DbTransaction that the command is part of. This allows us to create an identifier for the transaction using ObjectIDGenerator, and to include it in the message.

Unfortunately, the "Started Transaction" and "Committed Transaction" messages aren't processed through the DatabaseLogFormatter. They are simply written to the log directly.

What we need is to have information about what transaction each SQL statement was a part of, to include the started transaction and committed transaction messages.

Right now, I see no way of accomplishing this.

We're able to log the commands that EF is executing, by setting a delegate on DbContext.Database.Log.

When you do this, you see "Started Transaction at ..." and "Committed Transaction at ..." messages.

From this, you'd think you could determine the duration of the transactions. You can't. When load becomes high enough for transactions to begin to overlap, there is no way to match the start and commit transaction messages.

We're able to manipulate the text of the messages that are being logged by deriving a class from DatabaseLogFormatter.

Within DatabaseLogFormatter.LogCommand() we have access to the DbCommand, and through DbCommand.Transaction to…

It would be great if a model could be created from an existing database (database first) without including certain SQL naming conventions that may be in place. E.G. Rather than creating a POCO class named tbl_Person, I can tell the tool to exclude the "tbl_" prefix and the class is simply named Person. This would be useful for column/property mapping as well. Being able to use regular expressions for the replacement would probably be helpful. This would be useful when generating 10s to 100s of entities from tables so that they don't have to be renamed individually.

The lack of support for this is super frustrating, especially since anonymous classes are not supported in EF either, and from a performance perspective this is simply a fixed number of values being passed into a query (ie: should not be any more complex to execute on the DB).

For example, the following should work but is currently not supported:

The lack of support for this is super frustrating, especially since anonymous classes are not supported in EF either, and from a performance perspective this is simply a fixed number of values being passed into a query (ie: should not be any more complex to execute on the DB).

For example, the following should work but is currently not supported:

This is a nice idea and I am going to keep it open in the EF Core UserVoice site because there would probably be some work on EF Core to fully enable this in our queries. However the fundamental piece needed is in C#. Please check https://github.com/dotnet/csharplang or https://github.com/dotnet/roslyn to see if there are already issues for this and vote them, or create a new one.

When I was experimenting with EF7 and mapped an identity column to a Int64 property, I got an exception. Unfortunately the exception did not told me:
- which entity
- which property
had that mapping error...

So really, instead of having 2 pages of stack trace, those 2 words would have been more useful... NHibernate does this, don't tell me that a new ORM (almost 1 and a half decade after the birth of NH) is not capable of doing at least the same as the old ORM...

Of course this should be an optional feature that can be enabled from the DbContext configuration. It only makes sense when Lazy Loading is disabled.

This will be particularly useful for writing domain models that are independent of the data access technology and thus cannot use the EF functions to check whether a property is loaded.

Currently, if the logic inside the domain model tries to access a navigation property that is not loaded, this will either fetch the data from the database if lazy loading is enabled (a lot of developers do not like lazy loading) or, if lazy loading is disabled, the logic will incorrectly think that the navigation property is null or an empty collection.

Of course this should be an optional feature that can be enabled from the DbContext configuration. It only makes sense when Lazy Loading is disabled.

This will be particularly useful for writing domain models that are independent of the data access technology and thus cannot use the EF functions to check whether a property is loaded.

Currently, if the logic inside the domain model tries to access a navigation property that is not loaded, this will either fetch the data from the database if lazy loading is enabled (a lot of developers do not like lazy loading) or, if lazy…

Every time we need to search a string (contains/startswith etc), we need to write .ToLower() in each expression. But there should be a configuration property where we can define whether we want to search in case sensitive way or we want to ignore the case sensitivity.
Thus we can avoid writing the same expression in whole application's data layer.

Currently i have a problem of showing a link between different entities - Say students, courses and lectures. Students have few of the attributes of courses, and lectures also have few overlapping attributes of courses (used via reference keys). To show these 3 entities together in a model / UI view, i will always have a compute a single model and bind it to UI. For each change in entities i have to update model (and vice versa). Instead if i get a new POCO view (assuming its supported by EF), i can always show latest data using the new data view, on UI. This feature was initially supported using dataviews on top of datasets. Request is to have something similar, so we can avoid writing unnecessary POCO, which keeps on refreshing all the time.

Currently i have a problem of showing a link between different entities - Say students, courses and lectures. Students have few of the attributes of courses, and lectures also have few overlapping attributes of courses (used via reference keys). To show these 3 entities together in a model / UI view, i will always have a compute a single model and bind it to UI. For each change in entities i have to update model (and vice versa). Instead if i get a new POCO view (assuming its supported by EF), i can always show latest data using the new…

On the context simply allow a setting to ignore duplicate insertions. It should just add a not exist sub select query to ensure that a duplicate is not inserted on say a primary key or unique key...

This just removes a lot of admin on the insert side of things. If the data is already there why complain about about it unless you need to handle it.

This will be exceptionally useful on a many to many insert. If this is in place then I dont need to first check both sides of the insert to ensure that the data does not exist before inserting! Just insert and return a 0 rows affected var if it already exists

On the context simply allow a setting to ignore duplicate insertions. It should just add a not exist sub select query to ensure that a duplicate is not inserted on say a primary key or unique key...

This just removes a lot of admin on the insert side of things. If the data is already there why complain about about it unless you need to handle it.

This will be exceptionally useful on a many to many insert. If this is in place then I dont need to first check both sides of the insert to ensure that the data…

Add an option when using "update from DataBase" to choose how to resolve conflict name when two or more object have the same names but in diffrents schemas.
Auto resolve -> add a number at the end of object name.
Suffix or Prefix -> add the schema name to the objects names.

It would be great to update the EDMX from a database project. Currently we are working with an database project containing the tables, indexes, stored procedures, types etc... If we are able to update the EDMX directly from the database project, it would remove an extra step to connect with a database. In this way, we don't even need a hosted SQL server to update the EDMX.

The current solution means deleting the migration folder and then deleting the migration history table in the DB, and then adding a brand new migration - but then having to comment out the code in the UP()... which works but isn't optimal for example to check db consistency or when having new developers onboard the team and just being able to run Update-Database on their machine.

Kindly provide the support for Default Check Constraint, so that we are not forced to supply values to NOT NULL columns that are having a DEFAULT constraint and are being handled in table design.
Currently, work around is to supply some value even is the actual property is NULL

Many people have problems in using command line interfaces, as they are used to the visual studio click and go experience. It would be great if you could right click on a file that contains a dbcontext and then add-migration or update-database.