2

我喜欢使用 EntityFramework 在 ASP.NET MVC 上快速创建站点。我通常使用“databae first”原则和DbContext。

我创建了一个与 DbContext 交互并返回、更改、删​​除和添加条目的全局层。像这样的东西:

GetLastPosts (int count)
FindPostById (int id)
RemovePost (int id)
...

都在一个班级。通常,它会变得非常大,我不喜欢它。请告诉我您使用 EntityFramework 的经验。

4

3 回答 3

3

我通常将存储库模式与工作单元模式一起使用:

这是我找到的最好的教程。它展示了如何在 asp.net 中创建这两种模式,但是,在任何应用程序中的实现都是相同的。它不一定是 asp.net

http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/implementing-the-repository-and-unit-of-work-patterns-in-an-asp-net- mvc-应用程序

还有一个更一般的例子:

http://msdn.microsoft.com/en-us/library/ff649690.aspx

于 2012-07-05T13:09:22.673 回答
1

我喜欢的一种模式(我不知道它是否是公认的模式)是您在 DBContext 上创建扩展方法,它允许您加载包含查询的类。这意味着您可以在一定程度上划分您的查询。

public static XTypeQueries XTypeQueries(this EntityModel db)
{
    return new XTypeQueries(db);
}

并在一个单独的文件中

public class XTypeQueries : QueryLibrary
{
    public XTypeQueries (EntityModel db) : base(db) { }

    public IQueryable<Object> DoSomeQuery()
    {
        return from ... in this.db...
               select ...;
    }
}

您从中扩展的查询库对象很简单

public abstract class QueryLibrary
{
    protected readonly EntityModel db;

    protected QueryLibrary(EntityModel db)
    {
        this.db = db;
    }
}

这样做的结果是你可以做到

var query = new EntityModel().XTypeQueries.DoSomeQuery();

我尝试将方法保持为可查询的,以便在调用方法时您可以根据需要尽可能具体,而不会浪费大量处理。您现在拥有组合在一起的查询库,但就像您编写 Linq 内联一样。

于 2012-07-05T06:51:38.210 回答
0

更新

我认为您需要创建一个单独的数据库层,并且您将需要许多域类而不是单个类,它将像Repository Pattern一样对数据库实体执行创建、更新和删除等操作。

例如做与client你相关的操作将需要ClientRepository类。

var clientRepo = new ClientRepository();
clientRepo.AddClient(Client clientEntity);
List<Client> clientDM = clientRepo.GetClients(23);
于 2012-07-05T06:52:46.977 回答