Poco + Entity Framework 4. Где я должен добавить свои методы для работы с классами Poco? - PullRequest
3 голосов
/ 08 апреля 2011

Я пытался использовать Entity Framework 4 и POCO для моего проекта MVC 3. Может быть, я не понимаю основную идею этого ORM, но проблема в следующем:

  1. Я добавил ADO .NET Entity Data Model и сделал модель в соответствии с базой данных.
  2. Я нажал кнопку Добавить элемент генерации кода и добавил ADO .NET POCO Entity Generator.
  3. Создает классы для каждой таблицы базы данных.
  4. Я хочу добавить некоторые методы для работы с данными (Добавить, Обновить, Удалить, GetAll и т. Д.) В соответствующие модели. Для LINQTOSQL я добавил частичные классы и поместил их в модели. Но сейчас я не могу этого сделать, потому что:

a) Папка Models содержит классы с такими же именами, которые были созданы POCO.

b) Если я помещу свой частичный класс в другую папку, это будет другое пространство имен, поэтому такие классы не будут частичными.

в) Если я размещу свой код в классах POCO, он может быть уничтожен во время обновления POCO.

Как я могу это использовать? Где я могу разместить свои методы для работы с данными? Это лучший способ сделать для POCO и EF другой проект - http://blogs.msdn.com/b/adonet/archive/2010/01/25/walkthrough-poco-template-for-the-entity-framework.aspx?

Ответы [ 3 ]

2 голосов
/ 08 апреля 2011

Прежде всего вам не нужно писать свой CRUD внутри POCO, Есть много мест, где вы можете сделать это, например, в файле edmx.cs или написать еще один слой, который называется CRUD Services, который обрабатывает операции базы данных с использованием объекта контекста.

Теперь перейдем к вашим вопросам,

  1. Создайте отдельную папку Models и поместите туда классы Model. Класс вашей модели может понравиться,

    EmployeeDepartmentModel
    {
     prop EmpList List(Emp);
     prop DeptList List(Dept);
     //Emp and Dept are my POCOs
    }
    
  2. Так что теперь я должен заполнить оба этих списка (Ваш вопрос CRUD), Для этого я создам один метод в классе Controller (лучше написать такую ​​логику в какой-то другой библиотеке, но пока я предлагаю вам создать в Controller),

    FillTheModel()
    {
      EmployeeDepartmentModel.EmpList = EDMX.GetAllEmployees;
      EmployeeDepartmentModel.DeptList = EDMX.GetAllDepartments;
    }
    
  3. Теперь вы можете привязать эту модель к вашему виду.

2 голосов
/ 09 апреля 2011

Я согласен с allisewell, но если вы действительно хотите добавить детали к частичным классам, присвойте файлам другое имя, например MyPoco.Part2.cs, или измените шаблон t4 для именования сгенерированных файлов, например Poco.Generated.cs

2 голосов
/ 08 апреля 2011

Вы можете поместить частичные классы в другую папку и изменить пространство имен.

...