Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.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# 4.0 如何使用Dapper ORM获取子对象的值?_C# 4.0_Orm_Dapper - Fatal编程技术网

C# 4.0 如何使用Dapper ORM获取子对象的值?

C# 4.0 如何使用Dapper ORM获取子对象的值?,c#-4.0,orm,dapper,C# 4.0,Orm,Dapper,我正在使用以下内容检索配置文件详细信息: var profiles = connection.Query<Models.PROFILE>( "SELECT * FROM PROFILES WHERE ID=@ID", new { ID = profileID }); // IEnumerable var profile = profiles.First<Models.PROFILE>(); var profiles=connection.Query(

我正在使用以下内容检索配置文件详细信息:

var profiles = connection.Query<Models.PROFILE>(
    "SELECT * FROM PROFILES WHERE ID=@ID", 
    new { ID = profileID }); // IEnumerable
var profile = profiles.First<Models.PROFILE>();
var profiles=connection.Query(
“从ID=@ID的配置文件中选择*”,
新的{ID=profileID});//数不清
var profile=profiles.First();
profile对象包含其他集合,如profileImages。问题是每个子对象的项计数都是零。此外,我只想获得数据,比如说,profileImages

是否需要设置查询子对象的内容,如果需要,是否可以指定哪一个以及多少级别

我还尝试了多重映射:

var profiles = connection.Query<Models.PHOTOS_PERMISSIONS,
                                Models.PROFILE,
                                Models.PHOTOS_PERMISSIONS>(sql,
                    (p1, p2) => { p1.ID = profileID; return p1; }, 
                    new { ID = profileID }, 
                    splitOn: "OWNER_PROFILESIDFK, ID").AsQueryable();

PHOTOS_PERMISSIONS.OWNER_PROFILESIDFK = PROFILE.ID
var profiles=connection.Query(sql、,
(p1,p2)=>{p1.ID=profileID;返回p1;},
新的{ID=profileID},
splitOn:“OWNER_PROFILESIDFK,ID”).AsQueryable();
照片\u PERMISSIONS.OWNER\u PROFILESIDFK=PROFILE.ID
并获取以下错误:

使用多重映射API时,请确保在以下情况下设置splitOn参数 您有Id参数名称以外的键:splitOn


我已经尝试了splitOn文本中的内容,但仍然出现相同的错误。

Dapper不支持这种开箱即用的一对多映射。看看这个问题,也许会有帮助

如果您的PROFILEIMAGES表在PROFILES ID上有一个FK-您可以发出2个查询并使用GridReader

var sql = 
@"
select * from PROFILES where profileId= @id
select * from PROFILEIMAGES where OWNER_PROFILESIDFK = @id";

using (var multi = connection.QueryMultiple(sql, new {id=selectedId}))
{
   var profile = multi.Read<Models.PROFILE>().Single();
   profile.ProfileImages = multi.Read<Model.PROFILEIMAGES>().ToList();
} 
var sql=
@"
从profileId=@id的配置文件中选择*
从PROFILEIMAGES中选择*,其中所有者_PROFILESIDFK=@id”;
使用(var multi=connection.QueryMultiple(sql,new{id=selectedId}))
{
var profile=multi.Read().Single();
profile.ProfileImages=multi.Read().ToList();
} 

不错。实际上,我更喜欢它返回所有1..*映射,因为这可能导致膨胀的复杂对象。当然,他们有很多信息,但可能有一些是不需要的。通过这种方式,我可以显式地请求要从哪些子表中获取数据。谢谢