首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >你知道使用实体框架和DbContext的模式和实践吗?

你知道使用实体框架和DbContext的模式和实践吗?
EN

Stack Overflow用户
提问于 2012-07-05 14:43:40
回答 3查看 9.5K关注 0票数 2

我喜欢使用EntityFramework在ASP.NET MVC上快速创建站点。我通常使用“数据库优先”原则和DbContext。

我创建了一个全局层,它与DbContext交互,并返回、更改、删除和添加条目。如下所示:

代码语言:javascript
运行
复制
GetLastPosts (int count)
FindPostById (int id)
RemovePost (int id)
...

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-05 21:09:23

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

这是我找到的最好的教程。它展示了如何在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-application

还有一个更一般的例子:

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

票数 3
EN

Stack Overflow用户

发布于 2012-07-05 14:51:38

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

代码语言:javascript
运行
复制
public static XTypeQueries XTypeQueries(this EntityModel db)
{
    return new XTypeQueries(db);
}

并在一个单独的文件中

代码语言:javascript
运行
复制
public class XTypeQueries : QueryLibrary
{
    public XTypeQueries (EntityModel db) : base(db) { }

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

您要扩展的查询库对象只是

代码语言:javascript
运行
复制
public abstract class QueryLibrary
{
    protected readonly EntityModel db;

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

这样做的结果是,您可以

代码语言:javascript
运行
复制
var query = new EntityModel().XTypeQueries.DoSomeQuery();

我尽量保持该方法为Queryable,以便在调用这些方法时,您可以根据需要进行具体处理,而不会浪费大量的处理。现在,您已经拥有了组合在一起的查询库,但它们的行为就像编写Linq内联一样。

票数 1
EN

Stack Overflow用户

发布于 2012-07-05 14:52:47

更新

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

例如,要执行与client相关的操作,您将需要ClientRepository类。

代码语言:javascript
运行
复制
var clientRepo = new ClientRepository();
clientRepo.AddClient(Client clientEntity);
List<Client> clientDM = clientRepo.GetClients(23);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11339039

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档