2009-06-30 6 views
1

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

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

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

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

ответ

2

Множество примеров, которые вы можете использовать, заменив часть 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

Linq to SQL принимает ваши таблицы базы данных и сопоставляет их с бизнес-классами. Чтобы сделать то же самое без Linq для 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); 
     } 
    } 
} 
+0

Я делаю это ~ с ~ LINQ-to-SQL, а также. Мне не нравится жесткая привязка остальной части моей кодовой базы к классам, сгенерированным LINQ, поэтому они переводятся между созданными мной POCO. – mmcdole

+0

Спасибо. Это также отвечает на мой вопрос, но я не уверен, как выбрать как ответы. – Dkong

Смежные вопросы