我与另一位开发人员就mvc3的归因模式进行了讨论,EF让我感到非常困惑。
我不确定使用MVC3和EF的存储库模式的最佳做法。
假设我有一个名为Product的表,其中包含ProductID&产品名称。我创建了我的新EF模型。 我还创建了一个基本模型ProductModel
public int ProductID{get;set:}
public string ProductName{get;set}
我的控制器应该知道EF创建的实体吗?或者我的意思是在我的存储库中与EF进行所有谈话?
e.g。基本帖子
[HttpPost]
public ActionResult Product(ProductModel model)
然后在我的控制器中,我将模型传递到我的存储库以处理插入,或者我的控制器应该直接绑定到我的EF产品模型,然后将其传递到我的存储库以处理插入。
我认为使用存储库的想法就是让我们说在12个月的时间内如果我想要删除实体框架并使用其他东西我只需要更新我的存储库而不必触及任何我的控制员。
最佳做法是什么?
答案 0 :(得分:2)
如果您在更改控制器一段时间后转到stripe out the entity framework
,则需要使用存储库模式将持久性逻辑与UI分开。
此外,不要将模型类用作MVC图层的视图models
。您可以使用分离的视图模型进行UI逻辑,并使用类似AutoMapper(http://automapper.codeplex.com/)的内容来映射模型类。
答案 1 :(得分:1)
你的最后一段完美地总结了它。
您希望使用界面驱动的开发,以便您的Controller处理IProductRepository
。
使用依赖注入将具体的Entity Framework存储库注入Controller。
正如@Jayantha所提到的,您的[HttpPost]
操作应该接受ViewModel,而不是EF模型。
然后使用AutoMapper在ViewModel和EF模型之间进行映射。
存储库将EF逻辑包装在一个地方(保存,删除,更新等),因此您的控制器保持简单和愚蠢。
让你的界面尽可能简单和薄,然后如果/当你切换到新的实现时,只要新的实现符合接口规范,那么你的Controller不需要改变,只需依赖注入配置。
答案 2 :(得分:0)
我更喜欢使用Dev Magic Fake,使用Dev Magic Fake你不需要使用EF或考虑任何东西,你只需要添加对Dev Magic Fake程序集的引用并开始使用魔法方法
[HttpPost]
public ActionResult Product(ProductModel model)
{
var repoistory = new FakeRepository<ProductModel>();
repoistory.Save(ProductModel);
有关更多信息,请参阅CodePlex上的Dev Magic Fake
http://devmagicfake.codeplex.com
由于 M.Radwan