Petapoco — расширение объектов poco, сгенерированных шаблоном T4.

Для нового проекта я начал использовать шаблон 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());

Любые идеи?


person user1098036    schedule 14.12.2011    source источник


Ответы (2)


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

person Schotime    schedule 15.12.2011

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

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

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