2013-05-09 5 views
2

Это касается Dapper в ASP.NET MVC3.Dapper with multimapping с использованием хранимой процедуры

У меня есть две таблицы tblBranchMaster, tblZoneMaster в моей базе данных и два файла класса с одинаковыми деталями.

tblBranchMaster(ID, ZoneID, Name); 
tblZoneMaster(ID, Name);  

Обе таблицы имеют отношение к первичному ключу с внешним ключом.

У меня есть хранимая процедура, которая имеет следующий запрос:

Select * from tblBranchMaster; 

с каким-либо другим логическим материалом.

Теперь, как мне получить результат зоны с ее связанной веткой в ​​списке.

У меня следующий базовый код:

List<tblBranchMaster> lstResult = Query<tblBranchMaster, tblZoneMaster, tblBranchMaster> 
    (tblBranchMaster.uspGetBranchListPagination, (objBranch, objZone) => 
    { objBranch.ZoneMaster = objZone; return objBranch; }, 
    param, splitOn:"Id").ToList(); 

Этот код дает мне следующее сообщение об ошибке:

When using the multi-mapping APIs ensure you set the splitOn param if you have keys other than Id
Parameter name: splitOn

Что я отсутствующий ???

ответ

2

Результат запроса должен иметь тот же формат и порядок, что и объекты, которые вы хотите заполнить. В этом случае dapper ожидает, что вы будете иметь «Id, Name, Id, Name», где первые два будут Id и Name для главного сервера ветви, а 3-й и 4-й столбцы будут Id и Name для владельца зоны.

Учитывая следующие классы:

class Branch 
{ 
    int Id { get; set } 
    string Name { get; set } 
} 

class Zone 
{ 
    int Id { get; set } 
    string Name { get; set } 
} 

И следующий формат запроса SQL в хранимой процедуре:

SELECT b.Id, b.Name, z.Id, z.Name 
FROM Branch b LEFT JOIN Zone z ON b.ZoneId = z.Id 

Вы должны быть в состоянии использовать этот щеголеватый код:

var result = connection.Query<Branch, Zone, Branch> ("myStoredProcName", 
    (objBranch, objZone) => { objBranch.ZoneMaster = objZone; return objBranch; }, 
    param, commandType: CommandType.StoredProcedure).ToList(); 
+0

Что делать, если я не хочу использовать JOIN, так как обе таблицы имеют отношения, я не могу получить результат, основанный на отношении типа i n Структура сущностей. – Sham

+1

Dapper основан на написании собственных запросов, чтобы сформировать результат по мере необходимости, чтобы получить данные. Он не обрабатывает запросы автоматически, если вы не используете [Dapper Rainbow] (https://www.nuget.org/packages/Dapper.Rainbow). Однако Rainbow не обрабатывает привязки к моему воспоминанию. – PHeiberg

Смежные вопросы