Petapoco - Расширение созданного шаблона T4 для объектов poco - PullRequest
0 голосов
/ 14 декабря 2011

Для нового проекта я начал использовать шаблон PetaPoco T4 с GenerateOperations, GeneratePocos и GenerateCommon all = true.

Однако я хочу настроить сгенерированный объект poco. Если я изменю сгенерированный класс, он будет стираться каждый раз, когда я изменяю схему. Каков наилучший способ расширить созданные объекты Poco?


Как сказал Шотайм, я думаю, что решение может заключаться в использовании частичного класса, но мне трудно это сделать. Вот моя структура кода.

в файле Database.cs (автоматически создается по шаблону T4)

namespace PetaPocoNISEntities
{
    public partial class PetaPocoNISEntities : Database
    {

        [TableName("GivenQuestion")]
        [PrimaryKey("Id")]
        [ExplicitColumns]    
        public partial class GivenQuestion : PetaPocoNISEntities.Record<GivenQuestion>  
        {
            [Column] 
            public int Id             
            { 
                ....
            }
        }
}

}

поэтому я создал следующие частичные классы.

namespace PetaPocoNISEntities
{
    public partial class PetaPocoNISEntities : Database
    {
        public partial class GivenQuestion : PetaPocoNISEntities.Record<GivenQuestion>

            [ResultColumn]
            public QuestionRepository QuestionRepository { get; set; }

            [ResultColumn]
            public List<GivenAnswer> GivenAnswers { get; set; }
    }
}

Как видите, я использовал то же пространство имен.

но потом, когда я попытался использовать класс, следующий код жалуется, что gq (который является GivenQuestion) не содержит метод QuestinoRepository?

var givenAnswers = results.Where(gq => gq.QuestionRepository .QuestionCode.Trim().ToUpper() == _formData.Trim().ToUpper());

Есть идеи?

Ответы [ 2 ]

3 голосов
/ 15 декабря 2011

Вы можете использовать partial классы. Затем вы можете изменить частичный класс для добавления дополнительной информации.

0 голосов
/ 17 января 2012

Ваши классы не должны быть вложенными так, как вы их написали.У меня не было проблем с расширением моих объектов POCO частичными классами.

Кроме того, я бы украсил добавленные столбцы с помощью [PetaPoco.Ignore], как в:

public partial class GivenQuestion
{
    [PetaPoco.Ignore]
    public QuestionRepository QuestionRepository { get; set; }
    [PetaPoco.Ignore]
    public List<GivenAnswer> GivenAnswers { get; set; }
}
...