Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在第三个薰衣草嵌套处,Dapper Multi Mapping停止_C#_Dapper - Fatal编程技术网

C# 在第三个薰衣草嵌套处,Dapper Multi Mapping停止

C# 在第三个薰衣草嵌套处,Dapper Multi Mapping停止,c#,dapper,C#,Dapper,我提出了一个问题,并对其进行了修改以形成我的问题。我有一个从初始类到第二类以及附加到第二类(第三类)的元素(而不是附加到第三类的元素)的正确映射的查询。下面是一个例子 public class Part { public int Id { get; set; } public string Name { get; set; } public Address Address { get; set; } } public class Address { public int Id

我提出了一个问题,并对其进行了修改以形成我的问题。我有一个从初始类到第二类以及附加到第二类(第三类)的元素(而不是附加到第三类的元素)的正确映射的查询。下面是一个例子

public class Part {

 public int Id { get; set; }
  public string Name { get; set; }

  public Address Address { get; set; }
}

public class Address {
  public int Id { get; set; }
  public string Street { get; set; }

  public SiteOu Ou { get; set; }
}

public class SiteOu {
  public int Id { get; set; }

  public SiteOuName SiteOuN { get; set; }
}

public class SiteOuName
{
public int Id { get; set; }
  public string Name { get; set; }
}
整洁:

public void TestSplitOn()
{
    var conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;Integrated Security=true;Initial Catalog=db");
    conn.Open();
    const string sql = "select Id = 1, Name = 'My Part', " +
                       "Id = 2, Street = 'My Street', " +
                       "Id = 1, SiteOuNameId = '1'" +
                       "Id = 1, Name = 'My Site', " +;
    var result = conn.Query<Part, Address, SiteOu, SiteOuName, Part>(sql, (part, address, siteOu, siteOuName) =>
    {
        part.Address = address;
        address.Ou = siteOu;
        SiteOu.SiteOuName = siteOuName
        return part;
    },
    commandType: CommandType.Text
    ).FirstOrDefault();
}
public void TestSplitOn()
{
var conn=new SqlConnection(@“数据源=。\SQLEXPRESS;集成安全性=true;初始目录=db”);
conn.Open();
const string sql=“选择Id=1,名称=‘我的部分’,”+
“Id=2,Street='mystreet'”+
“Id=1,SiteOunNameID=1”+
“Id=1,Name=‘我的网站’,”+;
var result=conn.Query(sql,(部件、地址、站点OU、站点OUNAME)=>
{
部分地址=地址;
地址:Ou=siteOu;
SiteOu.SiteOuName=SiteOuName
返回部分;
},
commandType:commandType.Text
).FirstOrDefault();
}

如果我从Dapper映射中删除SiteOuName,代码会工作,但不会映射SiteOuName对象,但当我保持原样时,它会显示address对象引用为null。

据我所知,Dapper代码中存在两个问题。 首先,您的查询应该是这样的

const string sql = "select Id = 1, Name = 'My Part', " +
                           "Id = 2, Street = 'My Street', " +
                           "Id = 1, SiteOuNameId = '1'," +
                           "Id = 1, Name = 'My Site'";
SiteOuNameId='1'旁边缺少一个逗号,Name='My Site'旁边有额外的逗号和'+'号

其次,你的映射是错误的,应该是这样的

part.Address = address;
address.Ou = siteOu;
siteOu.SiteOuN = siteOuName;
return part;
在代码中,S是大写字母,这使编译器认为您正在使用SiteOu类。
另外,SiteOu类没有名为SiteOuName的属性,它应该是SiteOuN。

我决定使用实体框架