2016-02-04 3 views
1

Не могли бы вы привести мне какой-либо пример набора результатов запроса и сопоставления из объединенных таблиц? У меня есть следующий код:Любой пример использования соединения в запросе применим для npoco

DTO:

public class FormCatalogRecord 
{ 
    [Column("MFormId")] 
    public int Id { get; set; } 

    [Column("SGroupId")] 
    public int? GroupId { get; set; } 

    [Column("SGroupName")] 
    public string GroupName { get; set; } 

    [Column("STypeFormId")] 
    public int TypeId { get; set; } 

    [Column("MFormKod")] 
    public string Code { get; set; } 

    [Column("MFormName")] 
    public string Name { get; set; } 

    [Column("SFormPeriodName")] 
    public string Period { get; set; } 

    [Column("MFormDateStart")] 
    public DateTime? DateStarts { get; set; } 

    [Column("MFormDateEnd")] 
    public DateTime? DateEnds { get; set; } 

    [Column("MFormPublish")] 
    public DateTime? PublishDate { get; set; } 
} 

Запрос:

string formsQueryStr = 
        "FROM MForm " + 
        "INNER JOIN SFormPeriod ON MForm.SFormPeriodId = SFormPeriod.SFormPeriodId " + 
        "INNER JOIN SGroup ON MForm.SGroupId = SGroup.SGroupId " + 
        "ORDER BY MForm.SGroupId"; 

var test = db.Fetch<FormCatalogRecord>(formsQueryStr); 

В результате исключения: "Неоднозначное имя столбца" SGroupId". Я попытался изменить атрибут:

[Column("MForm.SGroupId")] 
public int? GroupId { get; set; } 

Теперь я получаю исключение

Неверное имя столбца «» MForm.SGroupId

Удивительно, я не нашел каких-либо примеров в официальной документации , Любая помощь, применимая для npoco, будет полезна.

UPDATE

Для моего первого случая я получаю следующий SQL генерируется:

SELECT 
    [MFormId] AS [Id], [SGroupId] AS [GroupId], 
    [SGroupName] AS [GroupName], [STypeFormId] AS [TypeId], 
    [MFormKod] AS [Code], [MFormName] AS [Name], 
    [SFormPeriodName] AS [Period], [MFormDateStart] AS [DateStarts], 
    [MFormDateEnd] AS [DateEnds], [MFormPublish] AS [PublishDate] 
FROM 
    MForm 
INNER JOIN 
    SFormPeriod ON MForm.SFormPeriodId = SFormPeriod.SFormPeriodId 
INNER JOIN 
    SGroup ON MForm.SGroupId = SGroup.SGroupId 
ORDER BY 
    MForm.SGroupId 

Я думаю, что нужно каким-то образом, чтобы добавить "MForm." перед «[SGroupId] AS [GroupId]». Было бы неплохо, если бы атрибут столбца мог поддерживать синтаксис, например [Column («TableName.ColumnName»)]

ответ

0

NPooc и PetaPoco - это разные проекты, теперь сложно связать друг с другом в наши дни.

Что касается вашего вопроса. Вы пробовали

string formsQueryStr = 
        "SELECT MForm.*" + 
        "FROM MForm " + 
        "INNER JOIN SFormPeriod ON MForm.SFormPeriodId = SFormPeriod.SFormPeriodId " + 
        "INNER JOIN SGroup ON MForm.SGroupId = SGroup.SGroupId " + 
        "ORDER BY MForm.SGroupId"; 

var test = db.Fetch<FormCatalogRecord>(formsQueryStr); 
+0

Не работает. Все объекты имеют значения свойств по умолчанию. NPoco просто не может сопоставлять имена столбцов свойствам, так как использует оператор SQL AS для переименования столбца при сопоставлении. Хотя я могу написать соответствующий SELECT вручную, он будет слишком сложным и неприемлемым. – shameleo

+0

Просто curiuos: вы задали вопрос о npoco, внося свой вклад в петапоко. Может ли петапоко справиться с этим? Я думаю о запросе на функцию (или, возможно, запрос на растяжение). См. Обновленный вопрос. Я знаю, что у моих таблиц есть необычные имена столбцов, но я не могу это изменить и мне нужно это сделать. – shameleo

+0

Ну, похоже, petapoco может делать правильное отображение с помощью SELECT *. Но использование * означает накладные расходы, не так ли? Мне не нужны все эти столбцы ... – shameleo

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