存储库模式与mvc没有实体框架

时间:2016-05-05 14:58:55

标签: asp.net asp.net-mvc entity-framework design-patterns repository-pattern

具有工作单元的存储库模式最适合实体框架应用吗?

我正在创建一个新的asp.net mvc应用程序,我想使用存储过程(微软企业库)而不是实体框架(或任何其他ORM)。

那么如何在mvc应用程序中使用存储库模式呢?

我已经探索了很多教程但没有得到预期的结果。请建议我更好的方法进行n层申请。

3 个答案:

答案 0 :(得分:5)

您必须了解"存储库模式"只是组织代码的想法。我想你仍然可以毫无问题地使用它。

我只是想为您提供一个使用sql存储过程实现的示例:假设您必须管理经典表" Contacts"。

您可以创建UnitOfWork合同:

public interface IContactsRepository {
 void AddContact(Contact c);
 void RemoveContact(Contact c);
 void UpdateContact(Contact c);
 void Search(string keyword);
}

之后,您可以在不使用EF的情况下创建自己的实现:

public sealed class SPContactsRepository : IContactsRepository {
 // Is just an exampl.e 
 public void AddContact(Contact c) {
   var sqlCommnad = new SqlCommand(this._connectionString);
   sqlCommand.CommandText = "dbo.AddContact";
   sqlCommand.CommandType = CommandType.StoredProcedure;
   sqlCommand.AddParameter("Name", c.Name);
   sqlCommand.Connection.Open();
   sqlCommand.ExecuteNonQuery();

 }
}

希望这可以提供帮助!

答案 1 :(得分:4)

所以,为了继续Roberto已经开始的,你在MVC应用程序中的控制器将如下所示:

public class ContactsController : Controller
{
    private readonly IContactsRepository _contactsRepo;

    public ContactsController(IContactsRepository repo)
    {
        _contactsRepo = repo;
    }
}

这些模式使用依赖注入(DI)。 DI容器有多种选择。您可以使用Unity,它是一个Microsoft软件包,您可以通过nuget软件包管理器安装到您的MVC Web项目中。安装将在UnityConfig.cs文件夹中创建App_Start文件。您可以将依赖关系注册为:

public static void RegisterComponents()
{
    var container = new UnityContainer();
    container.RegisterType<IContactsRepository, SPContactsRepository>();
}

Global.asax.cs内的Application_Start()文件中,您初始化容器:

UnityConfig.RegisterComponents();

答案 2 :(得分:0)

如果使用EF,则DbContext已经是您的工作单元,DbSet已经是您的存储库。话虽如此,您不应该创建一个将添加另一层数据抽象的存储库。相反,您可以创建域服务。

相关问题