Skip to content
Please note that GitHub no longer supports Internet Explorer.

We recommend upgrading to the latest Microsoft Edge, Google Chrome, or Firefox.

Learn more
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

Document EF Core architecture and internal technical details #1920

Open
ajcvickers opened this issue Nov 14, 2019 · 10 comments
Open

Document EF Core architecture and internal technical details #1920

ajcvickers opened this issue Nov 14, 2019 · 10 comments
Assignees
Labels
Milestone

Comments

@ajcvickers
Copy link
Member

@ajcvickers ajcvickers commented Nov 14, 2019

To make it easier for contributors and provider authors to understand the code.

Please comment on this issue with internal areas you would like to see documented.

Working list of possible topics to document. This list will evolve in the issue as we make progress. Not everything in the list will necessarily make it to documentation--it will depend on value, resources, etc. as usual.

  • Internal service provider
  • Singleton options
  • Dependency objects
  • DbContext initialization
  • Context pooling
  • Change tracking
  • SaveChanges/update pipeline
  • Everything query!
  • Proxies
  • Lazy-loading
  • Constructor injection
  • Everything model building! (#779)
  • Model building conventions (#1937)
  • Shadow properties
  • Logging
  • Interceptors
  • Diagnostics
  • External model building
  • Metadata interfaces (mutable, etc.)
  • Weak entity types
  • Owned entity types
  • TPT
  • TPH
  • TPC
  • Pubternal types
  • Paam
  • Parameter generation and facets
@ajcvickers

This comment has been minimized.

Copy link
Member Author

@ajcvickers ajcvickers commented Jan 30, 2020

@aspnet/efteam Please add anything with internals that it might be worth documenting. I would rather have too many things on this list and then trim it, so treat this as brainstorming list--no bad ideas!

@bricelam

This comment has been minimized.

Copy link
Member

@bricelam bricelam commented Jan 30, 2020

  • Plugins (type mapping, translators, etc.)
  • Migrations
    • Diffing (especially how provider model attributes become migration operation attributes)
    • DDL generation
  • Scaffolding/Reverse Engineering
    • How design-time services are discovered
    • Reading database metadata
    • Provider code hooks (UseMyProvider, literals, etc.)
  • How the tools work (dotnet-ef and the PMC cmdlets)
@HamedFathi

This comment has been minimized.

Copy link

@HamedFathi HamedFathi commented Jan 30, 2020

Please consider these:

  1. How to get current Table/Column/... information from DbContext. Like this

  2. How to call the scaffold/reverse tool by code (Not CLI). Like this

@ssg

This comment has been minimized.

Copy link

@ssg ssg commented Jan 31, 2020

I'm not sure if this counts as "internals" but after EF Core 3.0, satisfying the query compiler to run the code on the server-side has been really time consuming. I don't argue the benefits of the change but it's not a straightforward process. I wish there was a documentation comparing client-side running queries with equivalent server-side running ones.

@tudort-iquest

This comment has been minimized.

Copy link

@tudort-iquest tudort-iquest commented Jan 31, 2020

It would be great to see how the major patterns were implemented (or not) in EF - identity map, data mapper, repository, unit-of-work, lazy loading, association table mapping, metadata mapping, query object etc..

@kant2002

This comment has been minimized.

Copy link

@kant2002 kant2002 commented Jan 31, 2020

I in general agree with @ssg , but I want to see how do you generate SQL from different kind of queries. All releases of EF Core starting from betas has changes which require rewriting of the queries to satisfy new version. Expecially many issues I see withing queries which involve GROUP BY or other aggregate functions. If you explain how do you generate SQL using your internal model, it would be easier to write LINQ which will conform to your expected set of queries.

@kant2002

This comment has been minimized.

Copy link

@kant2002 kant2002 commented Jan 31, 2020

Also what is TPT, TPH, TPC and PMC ? It is not very clear.

@tudort-iquest

This comment has been minimized.

Copy link

@tudort-iquest tudort-iquest commented Jan 31, 2020

Also what is TPT, TPH, TPC and PMC ? It is not very clear.

table per type, table per hierarchy, table per concrete class - most O/RMs support these inheritance mapping strategies, maybe under different names..

@kant2002

This comment has been minimized.

Copy link

@kant2002 kant2002 commented Jan 31, 2020

Thanks, I get it. I decipher TPT and PMC myself, but other abbreviations not very often I see in MS documentation (or maybe communication better to say). So that's why I ask. Maybe I'm not alone in that.

@explorer14

This comment has been minimized.

Copy link

@explorer14 explorer14 commented Jan 31, 2020

  • change tracking
  • interceptors
  • save changes
  • context pooling
    , Please!
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
8 participants
You can’t perform that action at this time.