1

我有以下课程:

public class Foo
{
    public int Id { get; set; }
    ...
    public Boo Boo1 { get; set; }
    public Boo Boo2 { get; set; }
}

我想排除Boo1Boo2属性,但我不想用属性来装饰这些PetaPoco.Ignore属性。我想要纯 POCO 对象。我可以Ignore在代码中执行命令还是必须创建查询/存储过程并手动映射所有字段?

任何帮助将不胜感激!

4

3 回答 3

2

看起来 PetaPoco 不能以任何其他方式告知字段/属性应该被忽略而不是使用属性。您可以忽略一些成员,或者如果您没有映射类的大部分,那么您可以为该类指定显式列映射并装饰您想要映射的那些。我理解您对将特定于 ORM 的内容添加到“纯” POCO 的犹豫,但不幸的是,该信息必须在某个地方,并且由于 PetaPoco 不使用映射文件(或者根本不使用大部分配置,真的),该类是它去哪里。

您唯一能做的就是创建一个 DTO/DAO,它将作为映射的对象,然后创建隐式或显式运算符以在域类及其 DTO 之间进行转换。因此,DTO 不能包含您不想包含的字段。这保留了两个类 POCO(取决于您对运算符方法的感觉),并且它只是添加了一个相对简单的步骤,将查询结果转换为您的域类。

于 2012-03-12T16:05:54.680 回答
2

在我这里的分支中: https ://github.com/schotime/PetaPoco

您可以像我在这里描述的那样流利地描述您的模型:http: //schotime.net/blog/index.php/2011/05/16/fluent-petapoco-external-mappings/并使用基于约定的映射,如下所示:http://schotime.net/blog/index.php/2012/02/13/petapoco-convention-based-fluent-mapping/

于 2012-03-13T12:17:41.797 回答
0

这是匿名类型的好地方。

在您保存 foo 的方法中

public void InsertFoo(Foo f)
{
    var db = new Database("connection");           
    var petaPocoFooObj = new {f.Id}
    db.Insert("FooTable", "FooId", petaPocoFooObj);
}

这只是多一点工作,虽然如果你的类嵌套很深,它可能是一个 PITA。

于 2012-04-04T23:17:40.347 回答