Примеры связывания моделей без Linq2Sql в ASP.NET MVC - PullRequest
1 голос
/ 30 июня 2009

Я заметил, что во многих примерах ASP.NET в качестве источника данных используется Linq2Sql.

Существуют ли примеры, показывающие, как использовать привязку модели к источнику данных, отличному от Linq2Sql, то есть к набору данных, или (как в моем случае) общий список / набор элементов на основе настраиваемого бизнес-объекта? т.е.

public class WebsiteList : List<Website>
{
    public WebsiteList()
    {
    }  
}

ASP.NET MVC великолепен, особенно благодаря подходу «используй все, что хочешь». Обидно, что так много примеров используют Linq2Sql.

Ответы [ 2 ]

2 голосов
/ 30 июня 2009

Множество примеров, которые вы можете использовать, заменив часть Linq2Sql своим собственным репозиторием. Так как это IQueryable, вы можете заменить его на «WebsiteList.AsQueryable ()» и использовать большинство примеров как есть. Например, вот фиктивный репозиторий, который я использую:

public class FakeRepository<T> : IResourceRepository<T> where T : class
{
    private readonly List<T> items = new List<T>();
    private readonly IObjectFactory resolver;

    public FakeRepository(IObjectFactory resolver)
    {
        this.resolver = resolver;
    }

    public IQueryable<T> GetAll()
    {
        return this.items.AsQueryable();
    }

    public void Save(T item)
    {
        if (!this.items.Contains(item))
        {
            this.items.Add(item);
        }
    }

    public void Delete(T item)
    {
        this.items.Remove(item);
    }

    public T Create()
    {
        return this.resolver.GetInstance<T>();
    }
}

Я могу легко поменять это с реальным репозиторием (который может быть Linq2Sql, ADO.NET Entities, SubSonic, ...).

0 голосов
/ 30 июня 2009

Linq to SQL берет таблицы базы данных и сопоставляет их с бизнес-классами.Чтобы сделать то же самое без Linq to SQL, просто смоделируйте классы данных вручную и включите код для чтения и сохранения в базе данных.

namespace MyProject.Model
{
    public class Website
    {
        public int WebsiteID { get; set }
        public string Name { get; set }
        public string Url { get; set }
        public string Author { get; set }
    }

    public class WebsiteRepository
    {
        public Website Read(int id) { // read from database }
        public void Write(Website website) { // write to database }
        public website[] GetWebsites { }
    }
}

namespace MyProject.Controllers
{
    public class WebsiteController
    {
        WebsiteRepository repository = new WebsiteRepository();

        ActionResult Index()
        {
            Website[] websites = repository.GetWebsites();
            return View(websites);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...