Inverse of `.MapTo<'T>`
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 5/5
- Temps estimé
- Plus d'une semaine
- Accessibilité débutants
- 25/100
Piste de recherche
Commencez par examiner l’utilisation existante de MapTo<'T'> et le flux Create/SubmitUpdates présenté dans l’issue. Déterminez l’API et le comportement de mapping nécessaires pour transformer un enregistrement en entité, notamment la manière dont l’exemple devrait fonctionner sans affectations par colonne ; le travail est considéré comme terminé lorsque le comportement et les cas pris en charge sont définis et vérifiés.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Is your feature request related to a problem? Please describe.
This library provides the .MapTo<'T> to map an entity to a record type (which is awesome), but it is not as simple to map this record type back to an entity. Mapping back can be done manually, but it can get a little cumbersome when the entity has a lot of columns.
Describe the solution you'd like
It would be cool to have some sort of inverse of the .MapTo<'T> method that could take a record and return an entity.
Describe alternatives you've considered
As mentioned above, it can currently be done manually. This works fine for small entities, but scales with the number of columns in the entity.
Basic Example
If we have a table MyTable with column Id that is mapped by the record MyTable_Row, you can easily grab a row based on the column Id using
let getById (id: int): MyTable_Row option =
let foundRow = query {
for row in ctx.Dbo.MyTable do
where (row.Id = id)
select (Some row)
exactlyOneOrDefault
}
match foundRow with
| Some foundRow -> Some( foundRow.MapTo<MyTable_Row>() )
| None -> None
This method is independent of the number of columns in MyTable (other than in the definition of MyTable_Row). But, if we want to add a row to MyTable from a MyTable_Row, we need to manually specify that each column gets populated:
let insertRow (myRow: MyTable_Row) =
let newRow = ctx.Dbo.MyTable.Create()
newRow.Id <- myRow.Id
newRow.Column1 <- myRow.Column1
newRow.Column2 <- myRow.Column2
newRow.Column3 <- myRow.Column3
newRow.Column4 <- myRow.Column4
...
newRow.ColumnN <- myRow.ColumnN
ctx.SubmitUpdates()
With this, not only does the definition of the record type need to scale with the number of columns in the entity, but all functions performing inserts must too.
- Langage dominant
- F#
- Étoiles
- 627
- Forks
- 148
- Merge moyen
- 2 h 2 min
- PR mergées (30 j)
- 1
Préparer son environnement
Lance le conteneur de développement du projet dans votre navigateur, avec votre propre compte GitHub.
- Aucun Dockerfile ni fichier Docker Compose
- Propose un modèle de pull request
- Aucun guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de fsprojects/SQLProvider
-
enhancement
Difficulté 3/5 1-2 jours Accessibilité débutants 55/100
fsprojects/SQLProvider#872 · 2 commentaires ·
-
Repo Assist?Ouverteenhancement
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 10/100
fsprojects/SQLProvider#870 · 1 commentaire ·
-
postgresql
Difficulté 4/5 3-5 jours Accessibilité débutants 58/100
fsprojects/SQLProvider#869 · 2 commentaires ·
-
documentation
Difficulté 2/5 1-3 heures Accessibilité débutants 42/100
fsprojects/SQLProvider#868 · 2 commentaires ·
-
sql server
Difficulté 4/5 3-5 jours Accessibilité débutants 45/100
fsprojects/SQLProvider#851 · 1 commentaire ·
Toutes les issues de fsprojects/SQLProvider
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
-
Difficulté 2/5 1-3 heures Accessibilité débutants 85/100
objectionary/eo-graphs#82 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
debpalash/VoiceStudio#2751 ·
Les mainteneurs répondent en général sous 1 jour
-
Add MySQL test coverage for numeric_precision/numeric_scale and seq_in_fk (follow-up to #939)Peut-être pris @tosinxt l’a pris aujourd’hui. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
TabularisDB/tabularis#977 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Add: CartoonitoOuvertecheck:failed feeds:add
Difficulté 2/5 1-3 heures Accessibilité débutants 63/100
iptv-org/database#37390 · 1 commentaire ·
Les mainteneurs répondent en général sous 9 jours