gpt4 book ai didi

c# - 使用从一个 Controller 到另一个 Controller 的 DbContext 变量

转载 作者:行者123 更新时间:2023-11-30 14:58:02 33 4
gpt4 key购买 nike

您好,我正在使用 MVC 4 和 C# 开发具有两个 Controller 的应用程序:第一个称为 Business,它有一个名为 Create 的方法,该方法从另一个名为 PartnerController 的 Controller 调用一个名为 CreatePartner 的方法。

public class BusinessController : Controller
{
private storeContext db = new storeContext();

public ActionResult Create(Business business)
{
//Some stuff here

PartnerController pt = new PartnerController();
pt.CreatePartner(int partner_id);

//Here is another stuff that uses db DbContext variable
return RedirectToAction("Index");
}
}

这是第二个controller Called Partner

public class PartnerController : Controller
{
private storeContext db = new storeContext();

public void CreatePartner(int partner_id)
{
//Some interesting stuff
}
}

每个 Controller 都有自己的 Dispose() 方法

问题是:在我从业务 Controller 调用 CreatePartnet 方法后,我尝试再次使用 db 变量来保存其他数据,但它抛出以下异常:

 The operation can not be completed because the DbContext has been disposed 

-从一个 Controller 向另一个具有相同 DbContext 变量名的 Controller 使用方法的最佳方式是什么?

- 发生了一些奇怪的事情:我的东西在本地工作,但是当我在 IIS 服务器上发布我的代码时,应用程序抛出了该异常。

谢谢!

最佳答案

我可以建议一种替代方法吗?

Controller 不是业务逻辑的好地方;那就是他们不是“做事”的好地方。它通常以这种方式在 MVC 教程和示例中进行演示,但它实际上只对快速进入 MVC 有好处 - 这不是很好的做法。

此外, Controller 实际上不应该具有要调用的方法 - 从它们自己或从另一个 Controller 调用。 Controller 实际上应该只包含它们的操作。

相反,将您的逻辑提取到外部类。 Service是一种设计模式,其中抽象出常用的业务逻辑。这样一来,事物就可以引用服务并执行逻辑,而无需对实现一无所知。

观察:

IPartnerService

public interface IPartnerService
{
void CreatePartner(int partnerId);
}

默认合作伙伴服务

public class DefaultPartnerService : IPartnerService
{
private StoreContext db;

public DefaultPartnerService()
{
db = new StoreContext();
}

public void CreatePartner(int partnerId)
{
// Something interesting
}
}

业务 Controller

public class BusinessController : Controller
{
private IPartnerService _partnerService;

public BusinessController()
{
_partnerService = new DefaultPartnerService();
}

public ActionResult Create(Business business)
{
_partnerService.CreatePartner(business.PartnerId);
return RedirectToAction("Index");
}

}

当然,出于教育目的,这种方法也得到了极大的简化。这还不是最佳实践,但它可能会让您走上正轨。最终您会发现这种方法存在问题,并且您会倾向于阅读有关存储库、工作单元、依赖注入(inject)等内容。

关于c# - 使用从一个 Controller 到另一个 Controller 的 DbContext 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19849964/

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