C# 尝试在dapper查询中映射多个对象时出错
我在用下面SQL中给出的表结构测试dapperC# 尝试在dapper查询中映射多个对象时出错,c#,dapper,C#,Dapper,我在用下面SQL中给出的表结构测试dapper CREATE TABLE [dbo].[Layer]( [Name] [nvarchar](50) NOT NULL, [Key] [nvarchar](255) NULL, [FeatureColumn] [nvarchar](255) NULL, [Description] [nvarchar](255) NULL, [Defaults] [nvarchar
CREATE TABLE [dbo].[Layer](
[Name] [nvarchar](50) NOT NULL,
[Key] [nvarchar](255) NULL,
[FeatureColumn] [nvarchar](255) NULL,
[Description] [nvarchar](255) NULL,
[Defaults] [nvarchar](255) NULL,
[Comments] [nvarchar](255) NULL,
PRIMARY KEY ([Name] ASC)
)
CREATE TABLE [dbo].[Theme](
[Name] [nvarchar](50) NOT NULL,
[IsDefault] [bit] NULL,
[Field] [nvarchar](255) NULL,
[Layer] [nvarchar](255) NULL,
PRIMARY KEY ([Name] ASC)
)
用于在表中生成数据的SQL
INSERT INTO LAYER
(Name ,[Key] ,[Description] ,Defaults,Comments)
SELECT 'MOJO' ,'ADM1','Administrative' ,'NULL' ,'NULL' UNION ALL
SELECT 'Roads' ,'LID' ,'Roads' ,'NULL' ,'NULL'
INSERT INTO Theme (Name,IsDefault,Field,Layer)
SELECT 'M01',1,'ADM1','MOJO'
POCO对象是Layer和Theme,虽然我在SQL中没有提到它,但Layer table和Theme table Theme之间有一种关系。Layer->Layer
public class Layer
{
public virtual string Name { get; set; }
public virtual string Key { get; set; }
public virtual string Description{ get; set; }
public virtual ICollection<Theme> Themes { get; set; }
public virtual string Defaults { get; set; }
public virtual string Comments { get; set; }
public Layer()
{
Themes = new List<Theme>();
}
}
public class Theme
{
public virtual string Name { get; set; }
public virtual bool IsDefault { get; set; }
public virtual string Field { get; set; }
public virtual Layer Layer { get; set; }
public Theme()
{
}
}
有谁能告诉我这个问题可能是什么问题是,您的查询以字符串形式返回Theme.Layer,但在您的模型上,它映射为Layer类对象。解决此问题的一种方法是将查询更改为不返回该字段,因为它无论如何都不需要,然后更新映射代码以将图层特性设置为返回的图层对象。比如:
var sql = @"SELECT a.*, b.Name, b.IsDefault, b.Field
FROM Layer AS a
LEFT OUTER JOIN Theme AS b ON a.Name = b.Layer";
var k = conn.Query<Layer, Theme, Layer>(sql, (a, b) =>
{
if (b != null)
b.Layer = a;
a.Themes.Add(b);
return a;
}, splitOn: "Name");
var sql=@“选择一个*,b.名称,b.IsDefault,b.字段
从层作为一个
左外连接主题为a上的b。名称=b.Layer”;
var k=conn.Query(sql,(a,b)=>
{
如果(b!=null)
b、 层=a;
a、 主题。添加(b);
返回a;
},splitOn:“姓名”);
Error parsing column 9 (Layer=MOJO - String)
var sql = @"SELECT a.*, b.Name, b.IsDefault, b.Field
FROM Layer AS a
LEFT OUTER JOIN Theme AS b ON a.Name = b.Layer";
var k = conn.Query<Layer, Theme, Layer>(sql, (a, b) =>
{
if (b != null)
b.Layer = a;
a.Themes.Add(b);
return a;
}, splitOn: "Name");