0

对于一个新项目,我开始使用 PetaPoco T4 模板,其中GenerateOperationsGeneratePocosGenerateCommonall = true。

但是,我想自定义生成的 poco 对象。如果我修改生成的类,每次修改模式时都会将其清除。扩展生成的 poco 对象的最佳方法是什么?


正如 Schotime 所说,我认为解决方案可能是使用部分类,但我很难让它发挥作用。这是我的代码结构。

在 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());

有任何想法吗?

4

2 回答 2

3

你可以使用partial类。然后你可以修改部分类来添加额外的信息。

于 2011-12-15T07:25:12.690 回答
0

你的类不应该像你写的那样嵌套。我用部分类扩展我的 POCO 对象没有问题。

另外,我会用 [PetaPoco.Ignore] 来装饰添加的列,如下所示:

public partial class GivenQuestion
{
    [PetaPoco.Ignore]
    public QuestionRepository QuestionRepository { get; set; }
    [PetaPoco.Ignore]
    public List<GivenAnswer> GivenAnswers { get; set; }
}
于 2012-01-17T08:55:50.027 回答