Mappage des données de 2 tables vers une seule entité

c# dapper sql

Question

J'ai 2 tables qui ont une relation un à un. Les tables sont les suivantes:

CREATE TABLE [dbo].[Provider](
[ProviderId] [int] IDENTITY(1,1) PRIMARY KEY NOT NULL,
[FirstName] [varchar](40) NOT NULL,
[LastName] [varchar](40) NOT NULL,
[SSN] [varchar](15) NOT NULL,
[NPI] [varchar](15) NOT NULL,
[ProviderStatus] [bit] NOT NULL)

CREATE TABLE [dbo].[ProviderDetails](
[ProviderDetailsID] [int] IDENTITY(1,1) PRIMARY KEY NOT NULL,
[Certification] [varchar](40) NOT NULL,
[Specialization] [varchar](40) NOT NULL,
[TaxonomyCode] [varchar](40) NOT NULL,
[ContactNumber] [varchar](15) NOT NULL,
[ContactEmail] [varchar](40) NOT NULL,
[ProviderId]  [int] FOREIGN KEY REFERENCES Provider(ProviderId) NOT NULL)

J'ai créé 2 entités en C # (Attention, je n'utilise pas EF)

 public class Provider
{
    public int ProviderID { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string SSN { get; set; }
    public string NPI { get; set; }
    public ProviderDetails ProviderDetails { get; set; }
}

public class ProviderDetails
{
    public int ProviderDetailsId { get; set; }
    public string Certification { get; set; }
    public string Specialization { get; set; }
    public string TaxonomyCode { get; set; }
    public string ContactNumber { get; set; }
    public string ContactEmail { get; set; }
    public int ProviderId { get; set; }
}

J'ai, plus tôt, eu une seule entité, fournisseur. J'ai donc pu afficher la liste des fournisseurs avec le code suivant.

    public List<Provider> GetListofProviders()
    {
        List<Provider> Providers = new List<Provider>();
        using (_dbConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["DemoApplicationConnection"].ConnectionString))
        {
            try
            {
                Providers = (List<Provider>)(_dbConnection.Query<Provider>("spGetAllProviders", commandType: CommandType.StoredProcedure));
            }
            catch (Exception)
            {
                throw;
            }
        } 
        return Providers;
    }

Pour obtenir des données de la base de données, j'utilise la requête suivante:

ALTER PROC [dbo].[spGetAllProviders]
AS
SELECT * FROM Provider 
INNER JOIN ProviderDetails 
ON Provider.ProviderId = ProviderDetails .ProviderId
WHERE Provider.ProviderStatus = 1

Étant donné que j'ai divisé les entités, est-ce que quelqu'un pourrait me guider sur la façon dont je mapperais les données de la base de données aux deux entités?

Réponse populaire

Maintenant, ce n'est pas la bonne réponse. Mais je pense que ce serait la voie à suivre. Bien que cela ne fonctionne pas pour moi. Donc, si quelqu'un pouvait me dire ce que je fais mal, ce serait vraiment utile.

public List<Provider> GetListofProviders()
{
   List<Provider> Providers = new List<Provider>();
   using (_dbConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["DemoApplicationConnection"].ConnectionString))
   {
       try
       {
          Providers = _dbConnection.Query<Provider,ProviderDetails,Provider>("spGetAllProviders",null,splitOn: "ProviderId", commandType: CommandType.StoredProcedure).ToList();
       }
       catch (Exception)
       {
         throw;
       }
   } 
   return Providers;
}

La procédure stockée est également

ALTER PROC [dbo].[spGetAllProviders]
AS
SELECT Provider.*,
       ProviderDetails.ProviderId,
       ProviderDetails.ProviderDetailsID,
       ProviderDetails.Certification,
       ProviderDetails.Specialization,
       ProviderDetails.TaxonomyCode,
       ProviderDetails.ContactNumber,
       ProviderDetails.ContactEmail 
FROM Provider 
INNER JOIN ProviderDetails 
ON Provider.ProviderId = ProviderDetails .ProviderId
WHERE Provider.ProviderStatus = 1

Je reçois l'erreur suivante.

Lorsque vous utilisez les API multi-mapping, assurez-vous de définir le paramètre splitOn si vous avez des clés autres que Id



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi