gpt4 book ai didi

design-patterns - 存储库模式中的数据库调用在哪里?

转载 作者:行者123 更新时间:2023-12-04 02:53:06 25 4
gpt4 key购买 nike

我查看了几个存储库模式示例,但似乎无法确定数据库访问发生在何处。我看到的所有示例似乎都预期会使用 Entity Framework ,这超出了我正在做的小项目的范围。我正在尝试创建一个具有 5 个左右模型/​​ Controller 的 WebAPI 服务。

基本上,我的问题是:如何将我的数据库调用集成到项目中以及在哪里?我是否应该直接从 Controller 调用 DAL 方法,这似乎是反模式的? Controller 中的数据库上下文是如何使用示例中的 EF 完成的,但我不知道通过属性或构造函数实际传递给 Controller ​​的 where

编辑:

也许我不够清楚。我为此道歉。我没有使用 Entity Framework 。我对使用 EF 没有兴趣。我不会在我的项目中的任何时候使用它。

最佳答案

所以你必须直接使用 ADO.NET,对吧?

这是一个示例 repo 协议(protocol):

public class UserRepository : Repository<User>
{
public UserRepository(AdoNetContext context) : base(context)
{
}

public void Create(User user)
{
using (var command = _connection.CreateCommand())
{
command.CommandText = @"INSERT INTO Users (CompanyId, FirstName) VALUES(@companyId, @firstName)";
command.AddParameter("companyId", user.CompanyId);
command.AddParameter("firstName", user.FirstName);
command.ExecuteNonQuery();
}

//todo: Get identity. Depends on the db engine.
}


public void Update(User user)
{
using (var command = _connection.CreateCommand())
{
command.CommandText = @"UPDATE Users SET CompanyId = @companyId WHERE Id = @userId";
command.AddParameter("companyId", user.CompanyId);
command.AddParameter("userId", user.Id);
command.ExecuteNonQuery();
}
}

public void Delete(int id)
{
using (var command = _connection.CreateCommand())
{
command.CommandText = @"DELETE FROM Users WHERE Id = @userId";
command.AddParameter("userId", id);
command.ExecuteNonQuery();
}
}

public IEnumerable<User> FindUsers(string firstName)
{
using (var command = _connection.CreateCommand())
{
command.CommandText = @"SELECT * FROM Users WHERE CompanyId = @companyId AND FirstName LIKE @firstName";
command.AddParameter("companyId", LoggedInUser.companyId);
command.AddParameter("firstName", firstName + "%");
return ToList(command);
}
}

public IEnumerable<User> FindBlocked()
{
using (var command = _connection.CreateCommand())
{
command.CommandText = @"SELECT * FROM Users WHERE Status = -1";
return ToList(command);
}
}

protected void Fill(IDataRecord record, User user)
{
user.FirstName = (string)record["FirstName"];
user.Age = (int)record["Age"];
}
}

来 self 的 ADO.NET, the right way文章。

关于design-patterns - 存储库模式中的数据库调用在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17183143/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com