【问题标题】:Dapper and Stored ProceduresDapper 和存储过程
【发布时间】:2016-06-16 12:28:21
【问题描述】:

我有 2 个问题,希望这两个问题都能得到解答。 我有一个这样的模型:

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Email { get; set; }
}

现在假设我的存储过程(无法更改)返回 first_name、lastName 和 UserEmail。我想使用一些方法(希望是数据注释)将字段映射到属性。像这样的:

public class Person
{
    [Column(Name = "first_name")]
    public string FirstName { get; set; }
    [Column(Name = "lastName")]
    public string LastName { get; set; }
    [Column(Name = "UserEmail")]
    public string Email { get; set; }
}

这可能吗? 您可能会建议确保属性与字段名称匹配,因为它们不区分大小写,因此将 Email 更改为 UserEmail 会起作用,但不是出于这个原因。我有一个分配了 2 个 Person 的班级:

public class Example
{
    public string Name { get; set; }
    public Person Mother { get; set; }
    public Person Father { get; set; }
}

另外,我不能使用:

Dapper.DefaultTypeMap.MatchNamesWithUnderscores = true; 

因为它似乎忽略了所有其他属性。 任何帮助都将像往常一样不胜感激:)

【问题讨论】:

    标签: c# dapper


    【解决方案1】:

    你可以用链做到这一点。

    static Tortuga.Chain.SqlServerDataSource DS = new Tortuga.Chain.SqlServerDataSource (connectionString);
    
    var people = DS.Procedure("procName", new { @Param1 =  x, @Parm2 = y}).ToCollection<Person>().Execute();
    

    默认情况下它尊重Column 属性。


    你的第二个例子更难。您需要前缀,以便它知道哪个 FirstName 与哪个属性一起使用。

    public class Example
    {
        public string Name { get; set; }
        [Decompose("Mother_")]
        public Person Mother { get; set; }
        [Decompose("Father_")]
        public Person Father { get; set; }
    }
    
    SELECT x.nName, m.FirstName as Mother_FirstName, f.FirstName as Father_FirstName, [...] 
    FROM people x
    LEFT JOIN people f ON x.FatherKey = f.Key
    LEFT JOIN people m ON x.MotherKey = m.Key
    

    【讨论】:

      猜你喜欢
      • 2016-05-08
      • 1970-01-01
      • 2017-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多