Организация VS2008 сгенерированных моделей / контекстов данных LinqToSql / EntityFramework в сборках - PullRequest
1 голос
/ 20 апреля 2010

Какой шаблон следует использовать для доступа к данным в случае сгенерированных VS2008 L2 или EF DataModels? Репозиторий-шаблон или что?

Так как мы знаем, что VS2008 генерирует Data-Models и DataContexts / ObjectContexts в одном и том же файле, то как я должен расположить свои сборки VS2008 в своем решении VS2008 для достижения многоуровневого проектирования?

Если я использую шаблон репозитория, как я должен расположить свои сборки в решении VS2008 (так как Data-Models и Data / Object-Contextxts хранятся в одном файле ...)?

Любая веб-ссылка / ссылка будет приветствоваться.

Ответы [ 2 ]

1 голос
/ 08 мая 2010

Что я сделал, так это обернул (в моем случае Linq2Sql) в свой собственный класс, который реализует шаблон хранилища, вот вставленная выдержка из предыдущего, но несколько связанного ответа.

Я бырекомендуем прочитать The Onion Architecture и посмотреть MVC StoreFront видео для вдохновения.Волшебная часть заключается в том, чтобы отодвинуть часть Linq2Sql или материал EF в одну сторону, чтобы вы не сидели на ней так сильно, как, потяните ее, если хотите, таким образом, вы можете использовать Linq2Sql или EF или NHibernate.Это больше работы, но дает вам больше гибкости.

Вот мой пример CarProject

В проекте Car.Core

 public interface ICarRepository
 {
    IQueryable<Car> GetAllCars();
    void Add(Car);
 }

Затем у меня есть реализация интерфейса, котораязакрывает доступ к сгенерированному классу Linq2Sql.

Проект Car.Data

public class SqlCarRepository : ICarRepository
{
    private CarDataContext _context;

    public SqlCarRepository()
    {
        _context = new CarDataContext();
    }

    #region ICarRepository Members

    public IQueryable<Car> GetAllCars()
    {
        return _context.Cars;
    }

Вы можете иметь EF-эквивалентный курс, или NHibernate.

У меня нетвсе это полностью отсортировано, и я все еще учусь, но в настоящее время у меня есть следующие проекты:

Car.Core         --- All the interfaces and domain objects, DTO's etc
Car.Core.Tests   --- The tests of the core business logic.
Car.Web          --- Asp.net MVC frontend
Car.Web.Tests    --- Tests for the website
Car.Data         --- The Linq2Sql stuff lives in here
Car.Data.Tests   --- The tests for the DAL layer

В вашем сценарии вы можете либо поместить EF в Car.Data, либо изменить его на Car.Linq2Sql и Car.EntityFramework.Не уверен, что я буду делать.

1 голос
/ 08 мая 2010

В моем проекте Entity Framework я сохранил весь автоматически сгенерированный код как есть, и расширил некоторые автоматически сгенерированные частичные классы для более специфической функциональности (иногда я конвертирую объект автоматически сгенерированных классов в мои классы проекта ).

Я думаю, что модель и некоторые ваши расширения должны быть в одной сборке. У вас могут быть разные классы, которые будут хранить данные по-разному, и они должны быть в другой сборке, на которую будет ссылаться сборка DataModel.

Возможно, я не правильно понял вопрос. Если хотите, попробуйте и объясните, чего вы пытаетесь достичь.

...