Ces*_*llo 3 c# asp.net-mvc entity-framework
您好我正在使用MVC 4和C#来开发一个具有两个控制器的应用程序:第一个叫做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");
}
}
Run Code Online (Sandbox Code Playgroud)
这是第二个叫做合作伙伴的控制器
public class PartnerController : Controller
{
private storeContext db = new storeContext();
public void CreatePartner(int partner_id)
{
//Some interesting stuff
}
}
Run Code Online (Sandbox Code Playgroud)
每个控制器都有Dispose()方法
问题是:在我从业务控制器调用CreatePartnet方法后,我尝试再次使用db变量来保存其他数据,但它会抛出以下异常:
The operation can not be completed because the DbContext has been disposed
Run Code Online (Sandbox Code Playgroud)
- 使用从一个控制器到具有相同DbContext变量名称的另一个控制器的方法的最佳方法是什么?
- 奇怪的事情发生了:我的东西在本地工作,但是当我在IIS服务器上发布我的代码时,应用程序会抛出异常.
谢谢!
我可以建议另一种方法吗?
控制器不是业务逻辑的好地方; 那就是他们不是"做事"的好地方.它通常以这种方式在MVC教程和示例中演示,但它实际上只对快速进入MVC有好处 - 这不是很好的练习.
此外,控制器实际上不应该有自己调用的方法 - 或者从另一个控制器调用.控制器应该只包含它们的动作.
相反,将您的逻辑提取到外部类.甲服务是其中常用的业务逻辑被抽象化了的设计模式.这样事情就可以引用服务并执行逻辑而不需要了解实现.
注意:
public interface IPartnerService
{
void CreatePartner(int partnerId);
}
Run Code Online (Sandbox Code Playgroud)
public class DefaultPartnerService : IPartnerService
{
private StoreContext db;
public DefaultPartnerService()
{
db = new StoreContext();
}
public void CreatePartner(int partnerId)
{
// Something interesting
}
}
Run Code Online (Sandbox Code Playgroud)
public class BusinessController : Controller
{
private IPartnerService _partnerService;
public BusinessController()
{
_partnerService = new DefaultPartnerService();
}
public ActionResult Create(Business business)
{
_partnerService.CreatePartner(business.PartnerId);
return RedirectToAction("Index");
}
}
Run Code Online (Sandbox Code Playgroud)
当然,出于教育目的,这种方法也大大简化了.这还不是最好的做法,但它可能会让你走上正轨.最终你会发现这种方法的问题,你会倾向于阅读有关存储库,工作单元,依赖注入等的信息.
归档时间: |
|
查看次数: |
766 次 |
最近记录: |