Add sugar to allow opt-in mapping for properties/relationships/etc.

Open
#16,009 6 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
5/5
Estimated time
Over a week
Newbie friendliness
25/100
Issue type
Feature
Clarity
Mostly clear
Activity status
Stale
Tech stack
csharp
Domain
databases

Research direction

Start with the issue’s example of a generated Car class extended with a non-persisted property, and compare the requested opt-in mapping approach with the [NotMapped] workaround it describes. The issue names no files, tests, or entry points, and does not specify the desired API; the first step is to clarify the design and what behavior would count as complete.

Written by the indexing model from the issue text.

Description

area-model-building customer-reported

If I have a class that is to be used with EF as a complete and correct table mapping. This class is generated from some description elsewhere.

public partial class Car
{
  public int Id {get; set;}
  public string Name {get; set;}
  public string MfgYear {get; set;} 
  etc...
}

This class is intended to be extended with some additional properties that do not require persistence and a few methods.

public partial class Car
{
  public int MaxSpeed {get; private set;}
  public void RecalculateMaxSpeed(int accelerationTime, int accelerationRate)
  {
    //this math is for example purposes only and is not intended to be complete or correct
    MaxSpeed = accelerationTime * accelerationRate; 
  }
}

When I try to save an instance of Car, EF errors about MaxSpeed not being mapped. The advice most commonly given is to either add [NotMapped] to MaxSpeed, or to create a second Car class and add the MaxSpeed property to that and remap the EF object to the new Car on Gets and back to the EF object on Saves. The remapping is not preferable and is not an option in the scope of this post.

Adding [NotMapped] to every field not part of the entity is also ripe with chances for bugs to happen.

Is there any way to "Opt In" an object and specific properties so that EF knows which are eligible for its scope?

Dominant language
C#
Stars
14.8k
Forks
3.4k
Avg merge
2d 5h
Merged PRs (30d)
134

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from dotnet/efcore

All issues in dotnet/efcore

Similar issues

More C# issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.