gpt4 book ai didi

c# - 没有 Entity Framework 的 C# 中的存储库模式

转载 作者:搜寻专家 更新时间:2023-10-30 23:27:29 25 4
gpt4 key购买 nike

我有一个新项目需要连接到 Oracle 9i。我想使用存储库模式(我是新手)来组织我的代码。我将使用一些存储过程来进行一些查询。

我想以不重复并遵循最佳实践的方式编写我的代码。

请检查下面我的代码,让我知道我做的是否正确。我有一种感觉,我不是。

我尝试阅读有关同一主题的其他帖子,但没有成功。

public interface IDeliveryRepository : IDisposable
{
IEnumerable<Delivery> GetDeliveries();
Task GetDelivery(int id);
void Insert(Delivery delivery);
void Delete(Delivery delivery);
void Update(Delivery delivery);
}

存储库:

public class DeliveryRepository: IDeliveryRepository
{
public Delivery GetDelivery(int id)
{
Delivery delivery = null;
var sql = "SELECT d.id , o.owner_id, o.name FROM delivery d JOIN owner o on o.id = d.owner_id where id = :t";

using (var con = new OracleConnection(AppConfig.CALL_CENTER_CONNECTION_STRING))
{
con.Open();

using (var cmd = new OracleCommand(sql, con))
{
cmd.BindByName = true;
cmd.Parameters.Add("t", id);

using (var oraReader = cmd.ExecuteReader())
{
while (oraReader.Read())
{
delivery = new Delivery
{
Id = oraReader.GetString(oraReader.GetOrdinal("id")),
Owner = new Owner
{
Id = oraReader.GetString(oraReader.GetOrdinal("owner_id")),
Name = oraReader.GetString(oraReader.GetOrdinal("name"))
}
};
}
}
}
}

return delivery;
}

.....

最佳答案

您不需要将存储库设为 IDisposable,要使用 Task,您应该使用 Async programming model 实现整个类.我已经在下面更新了您的代码,这应该使您接近可以扩展的编译基线。

 // Removed the IDisposable interface
public interface IDeliveryRepository
{
IEnumerable<Delivery> GetDeliveries();

// Changed the below from a Task to a Delivery as the return type. To use Task,
// your entire implementation should be asynchronous.
Delivery GetDelivery(int id);
void Insert(Delivery delivery);
void Delete(Delivery delivery);
void Update(Delivery delivery);
}

public class DeliveryRepository: IDeliveryRepository
{
public Delivery GetDelivery(int id)
{
Delivery delivery = null;
var sql = "SELECT d.id , o.owner_id, o.name FROM delivery d JOIN owner o on o.id = d.owner_id where id = :t";
using (var con = new OracleConnection(AppConfig.CALL_CENTER_CONNECTION_STRING))
{
con.Open();
using (var cmd = new OracleCommand(sql, con))
{
cmd.BindByName = true;
cmd.Parameters.Add("t", id);
using (var oraReader = cmd.ExecuteReader())
{
while (oraReader.Read())
{
delivery = new Delivery
{
Id = oraReader.GetString(oraReader.GetOrdinal("id")),
Owner = new Owner
{
Id = oraReader.GetString(oraReader.GetOrdinal("owner_id")),
Name = oraReader.GetString(oraReader.GetOrdinal("name"))
}
};
}
}
}
}
return delivery;
}

public void Insert(Delivery delivery)
{
/// Add your code here
throw new NotImplementedException();
}


public void Delete(Delivery delivery);
{
/// Add your code here
throw new NotImplementedException();
}

public void Update(Delivery delivery);
{
/// Add your code here
throw new NotImplementedException();
}

public IEnumerable<Delivery> GetDeliveries();
{
/// Add your code here
throw new NotImplementedException();
}
}

关于c# - 没有 Entity Framework 的 C# 中的存储库模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54742988/

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