Атрибут PetaPoco и Ignore - PullRequest
       1

Атрибут PetaPoco и Ignore

1 голос
/ 12 марта 2012

У меня есть следующий класс:

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

Я хочу исключить свойства Boo1 и Boo2, но я не хочу украшать эти свойства атрибутом PetaPoco.Ignore. Я хочу иметь чистые объекты POCO. Могу ли я выполнить команду Ignore в коде или мне нужно создать запрос / хранимую процедуру и вручную сопоставить все поля?

Любая помощь будет принята с благодарностью!

Ответы [ 3 ]

2 голосов
/ 13 марта 2012

В моей ветке здесь: 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/

1 голос
/ 12 марта 2012

Похоже, что PetaPoco никак нельзя сказать, что поля / свойства должны игнорироваться, кроме использования атрибутов.Вы можете либо игнорировать несколько членов, либо, если вы не отображаете большинство классов, вы можете указать явное сопоставление столбцов для класса и украсить те, которые вы хотите отобразить.Я понимаю, что вы не решаетесь добавить ORM-специфическую дробь к «чистому» POCO, но, к сожалению, эта информация должна быть где-то, и, поскольку PetaPoco не использует файлы сопоставления (или вообще большую часть конфигурации), класскуда он идет.

Единственное, что вы можете сделать, это создать DTO / DAO, который будет отображаться, а затем создать неявные или явные операторы для преобразования между классом домена и его DTO.Таким образом, DTO может просто не иметь полей, которые вы не хотите включать.Это сохраняет оба класса POCO (в зависимости от ваших ощущений относительно методов операторов) и просто добавляет относительно простой шаг приведения результата запроса к классу вашего домена.

0 голосов
/ 05 апреля 2012

Это отличное место для анонимного типа.

В вашем методе сохранения foo

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

Это просто немного больше работы, хотя это может быть PITA, если ваши классы глубоко вложены.

...