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。我决定使用实体框架