ASP.NET MVC中的非Linq2Sql模型绑定示例

时间:2009-06-30 01:45:40

标签: c# asp.net-mvc data-binding model

我注意到很多ASP.NET的例子都使用Linq2Sql作为数据源。

是否有任何示例显示如何使用非Linq2Sql数据源(即数据集)进行模型绑定,或者(如我的情况)基于自定义业务对象的项目的通用列表/集合?即。

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

ASP.NET MVC非常棒,特别是对于“使用任何你想要的”方法。很多例子都使用Linq2Sql,这简直太可惜了。

2 个答案:

答案 0 :(得分: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实体,SubSonic,......)进行交换。

答案 1 :(得分:0)

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);
        }
    }
}