gpt4 book ai didi

asp.net-mvc - ASP.NET MVC - DbContext 良好实践

转载 作者:行者123 更新时间:2023-12-03 04:45:02 24 4
gpt4 key购买 nike

我正在使用 Entity Framework 启动一个新的 .NET MVC 项目,但我遇到了一些问题。

  1. 在我的模型中,我有大约 150 个实体(从数据库生成)。只有一个 DbContext 是个好主意吗?如果不是,我应该如何划分我的实体?

  2. 如果我有一个 DbContext 并且创建了一个类变量来实例化数据库上下文对象(在 Controller 中),那么这个 DbContext 会发生什么?它是否在内存中为我的每个实体创建单独的空间?就我而言,当我有 150 个实体时,它不会很有效。我错了吗?

  3. 我将在许多 Controller 中使用我的 DbContext。创建一个 MainController(我在其中创建新的 DbContext)是一个好主意吗?它将由其余 Controller 继承?因为这允许其他人访问相同的 Context。

  4. 处置 DbContext 的最佳实践是什么?我读到使用依赖注入(inject)是一种很好的做法。但这样我就必须将上下文注入(inject)到我的每个 Controller 中。现在哪种依赖注入(inject)方式最流行、最常用?

真的需要你的建议。这将使我对这一发展有更深入的了解。

最佳答案

  1. 拥有一个 DbContext 就可以了。如果您有很多实体,您只需要确保您需要的所有实体都存在于该上下文中。例如,如果您从数据库中检索 Person 及其相关的 Address,则 PersonAddress必须存在于同一个 DbContext 中。

    我还没有尝试使用多个 DbContext 实例,但需要注意的一件事是,如果您在多个上下文中包含同一个表,则最终可能会得到具有相似名称或可能发生冲突的类。例如,如果您在两个上下文中包含 Person,则每个上下文都会尝试创建一个名为 Person 的类。

  2. 当您创建DbContext时,它只会为您从数据库检索的数据创建对象。因此,如果您请求 Person 表中的一行,则只会创建一个 Person 对象。如果您请求 100 行,则将创建 100 个实例。

  3. 实际上有两个选择。第一,在每个操作中创建一个新实例,完成您的工作,然后保存它。或者,在构造函数中创建一个 DbContext 并在整个类中重用它。

  4. 这取决于您在第 3 点中选择的内容。如果将其传递到构造函数中,则实现 IDisposable 并在其中释放它。如果您在每个操作中创建一个新操作,请确保使用 using 语句处理它。

对于依赖注入(inject),有许多关于如何在 ASP.NET MVC 中执行此操作的选项、教程等。我个人使用 Autofac 和相关的 MVC 扩展,并将 DbContext 的新实例传递到每个 Controller 中。

关于asp.net-mvc - ASP.NET MVC - DbContext 良好实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29456103/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com