我将MVC5与Entity Framework一起使用,并且我的应用程序具有2层(项目):数据层(DL)和组合的业务/演示层(BPL)。 CRUD操作在DL中定义,并通过和接口在BPL中访问。 BPL中的类相互依赖,也取决于DL。我试图在下面的图片中显示该场景:
上图显示CustomerItemViewModelConntroller同时依赖于ICRUDOperations和CustomerBusinessLogic。执行create方法时,在创建CustomerItemBusinessLogic实例时,它将首先读取CRUDOperations,而在CustomerItemBusinessLogic启动时,它将再次读取CRUDOperations。这是完成单个过程之前的两次阅读。
我有一个StackOverFlow异常,我怀疑是由于这种多次访问。我会得到纠正。有没有办法解决这么多读物?这可能是引起StackOverFlow异常的原因吗?
以下是该异常的摘要:
System.StackOverflowException未处理 HResult = -2147023895 消息=类型'System.StackOverflowException'的异常被抛出。 InnerException:
发生异常的代码段:
public sealed class GetCRUDAction
{
public ICRUDCollections<Customer> getCustomerCRUD()
{
return new CustomerCRUD();
}
}
CustomerCRUD执行正常的数据库读取,更新和删除操作。下面的示例是CustomerCRUD的创建方法
public Customer Create(Customer cust)
{
using (var db = new DbConxn())
{
db.Customers.Add(cust);
db.SaveChanges();
return cust;
}
}
我的控制器代码如下:
private ICRUDCollections<Customer> _cust = new GetCRUDAction().getCustomerCRUD();
private CustomerItemBusinessLogic _bl = new CustomerItemBusinessLogic();
// GET: CustomerItemViewModel/Index
public ActionResult Index()
{
return View(_cust.Read());
}
// Post: CustomerItemViewModel/Create
public ActionResult Create(FormCollection collection)
{
Customer cust = _bl.setCustomerItems(collection);
Item item = _bl.setItemDetails;
return RedirectToAction("Index");
}
最后,CustomerItemBusinessLogic看起来像:
private ICRUDCollections<Customer> _cust = new GetCRUDAction().getCustomerCRUD();
public Customer setCustomerItems(FormCollection collection)
{
Customer cust = new Customer();
string c_name = collection["cust_Name"];
return cust;
}
重复是在Controller和BusinessLogic类中的:
私有ICRUDCollections _cust =新的GetCRUDAction()。getCustomerCRUD();