Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

Inverse of `.MapTo<'T>`

Ouverte
#731 4 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Évaluation

Difficulté
5/5
Temps estimé
Plus d'une semaine
Accessibilité débutants
25/100
Type d'issue
Fonctionnalité
Clarté
À clarifier
Activité
À l'abandon
Stack technique
fsharp, sql
Domaine
databases

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

enhancement

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

Ouvrir dans Codespaces

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

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de fsprojects/SQLProvider

Toutes les issues de fsprojects/SQLProvider

Issues similaires

Plus d'issues Databases

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.