没有 entity framework 的带有 mvc 的存储库模式
Repository pattern with mvc without entity framework
具有工作单元的存储库模式是否最适合 entity framework 应用程序?
我正在创建一个新的 asp.net mvc 应用程序,我想使用存储过程(微软企业库)而不是 Entity framework(或任何其他 ORM)。
那么我如何在 mvc 应用程序中使用存储库模式?
我浏览了很多教程,但没有得到预期的结果。请建议我更好的 n 层应用程序方法。
你要明白,"repository pattern"只是组织代码的一种想法。我认为您仍然可以毫无问题地使用它。
我只是想为您提供一个使用sql 存储过程的实现示例:假设您要管理经典table "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();
}
}
希望对您有所帮助!
因此,为了继续 Roberto 已经开始的工作,您在 MVC 应用程序中的控制器将如下所示:
public class ContactsController : Controller
{
private readonly IContactsRepository _contactsRepo;
public ContactsController(IContactsRepository repo)
{
_contactsRepo = repo;
}
}
这些模式使用了依赖注入(DI)。 DI 容器有多种选择。您可以使用 Unity,它是一个 Microsoft 包,您可以通过 nuget 包管理器将其安装到您的 MVC web 项目中。安装将在您的 App_Start
文件夹中创建一个 UnityConfig.cs
文件。您可以将依赖项注册为:
public static void RegisterComponents()
{
var container = new UnityContainer();
container.RegisterType<IContactsRepository, SPContactsRepository>();
}
然后在 Application_Start()
内的 Global.asax.cs
文件中初始化容器:
UnityConfig.RegisterComponents();
如果您使用 EF,DbContext 已经是您的工作单元,而 DbSet 已经是您的存储库。话虽如此,您不应该创建一个会添加另一层数据抽象的存储库。相反,您可以创建域服务。
具有工作单元的存储库模式是否最适合 entity framework 应用程序?
我正在创建一个新的 asp.net mvc 应用程序,我想使用存储过程(微软企业库)而不是 Entity framework(或任何其他 ORM)。
那么我如何在 mvc 应用程序中使用存储库模式?
我浏览了很多教程,但没有得到预期的结果。请建议我更好的 n 层应用程序方法。
你要明白,"repository pattern"只是组织代码的一种想法。我认为您仍然可以毫无问题地使用它。
我只是想为您提供一个使用sql 存储过程的实现示例:假设您要管理经典table "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();
}
}
希望对您有所帮助!
因此,为了继续 Roberto 已经开始的工作,您在 MVC 应用程序中的控制器将如下所示:
public class ContactsController : Controller
{
private readonly IContactsRepository _contactsRepo;
public ContactsController(IContactsRepository repo)
{
_contactsRepo = repo;
}
}
这些模式使用了依赖注入(DI)。 DI 容器有多种选择。您可以使用 Unity,它是一个 Microsoft 包,您可以通过 nuget 包管理器将其安装到您的 MVC web 项目中。安装将在您的 App_Start
文件夹中创建一个 UnityConfig.cs
文件。您可以将依赖项注册为:
public static void RegisterComponents()
{
var container = new UnityContainer();
container.RegisterType<IContactsRepository, SPContactsRepository>();
}
然后在 Application_Start()
内的 Global.asax.cs
文件中初始化容器:
UnityConfig.RegisterComponents();
如果您使用 EF,DbContext 已经是您的工作单元,而 DbSet 已经是您的存储库。话虽如此,您不应该创建一个会添加另一层数据抽象的存储库。相反,您可以创建域服务。