2015-08-25 64 views
1

我的問題:使用此擴展時,它只將來自數據庫的ID值映射到類對象。將SQL映射到Dapper中的類

所以我很好奇我如何讓它映射其他值?

C#映射

public class SoftwareReleaseTypeHandle : SqlMapper.TypeHandler<SoftwareRelease> 
    { 
     public override SoftwareRelease Parse(object value) 
     { 
      if (value == null || value is DBNull) 
      { 
       return null; 
      } 

      SoftwareRelease rel = new SoftwareRelease(); 
      rel.ID = (Guid)value; 

      return rel; 
     } 

     public override void SetValue(IDbDataParameter parameter, SoftwareRelease value) 
     { 
      parameter.DbType = DbType.Guid; 
      parameter.Value = value.ID.ToString(); 
     } 
    } 

的SQL表看起來像這樣:

CREATE TABLE [dbo].[SoftwareRelease](
    [ID] [uniqueidentifier] NOT NULL, 
    [Type] [tinyint] NOT NULL, 
    [ReleaseType] [tinyint] NOT NULL, 
    [Version] [nchar](30) NOT NULL, 
    [ZipFile] [varbinary](max) NOT NULL, 
    [Date] [datetime] NOT NULL 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] 

我用這個映射是如此,在我的代碼中的其他地方,我可以這樣做的原因,並會自動映射到:

class MyInstallation 
{ 
public string Bla; 
public string BlaBla; 
SoftwareRelease MyInstallation; 
} 

而當我第使用Dapper從類似的表中獲取。

CREATE TABLE [dbo].[MyInstallation](
     [ID] [uniqueidentifier] NOT NULL, 
     [Bl] [nchar](30) NOT NULL, 
     [BlaBla] [nchar](30) NOT NULL, 
     [MyInstallation] [uniqueidentifier] NOT NULL, 
    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] 

回答

1

小巧型處理程序旨在將數據庫中的單列值映射到POCO中的單個成員。它們用於Dapper核心不理解的類型 - 通常不是.NET核心類型的任何類型。

你不說正是你需要做的,但如果你只是想從數據庫中讀取SoftwareRelease行,那麼你可以簡單地做到以下幾點:

myDb.Query<SoftwareRelease>("SELECT * FROM SoftwareRelease"); 

更新

聽起來像你真正想要的是multi-mapping。如果你有以下查詢:

SELECT a.Bla, a.BlaBla, b.* 
FROM MyInstallation a 
INNER JOIN SoftwareRelease b ON a.SoftwareReleaseId = b.ID 

然後你可以使用以下方法來填充對象:多由使用

myDB.Query<MyInstallation, SoftwareRelease, MyInstallation>(
    sql, 
    (installation, softwareRelease) => { 
     installation.SoftwareRelease = softwareRelease; 
    }); 
+0

增加。但基本上,我從其他表中的Referense GUID獲得SoftwareRelease類對象。 但是,當我添加這個,我基本上打破了它無法得到SoftwareRelease類 – EKS

+0

更新我的答案,包括一種替代方式的做事情... –