在我们的解决方案中,我们有这样的业务对象:
[Serializable()]
public class Vendor : Recordable
{
protected int vendorID;
protected string vendorName;
protected string vendorNumber;
public void Save()
{
//call to sql stored procedure using ado.net to save
dbhelper.addSPParam("name",vendorName);
dbhelper.addSPParam("number",vendorNumber);
dbhelper.addSPParam("id",vendorID);
dbhelper.executeSP("sp_name");
}
Vendor(int id)
{
//call stored procedure to get vendor data by ID
this.vendorID = reader["vendorID"];
this.vendorName = reader["vendorName"];
this.vendorNumber = reader["vendorNumber"];
}
我们的代码与ADO.net相关联,但我们希望使用实体框架进行查询,而不是手动编写所有内容。我们希望保留一些存储过程,因为它们中包含业务逻辑,但是大多数存储过程调用我们都希望使用实体框架。
我们如何塑造我们的项目以使用实体框架,一些存储过程,并添加单元测试(我们的代码都没有经过测试)?
会喜欢任何想法。
答案 0 :(得分:0)
这个问题实在太宽泛了,您需要尝试将其分解为较小的,可回答的部分(其中一部分可能会重复)。
这个答案可能会被删除,因为它的答案确实比直接答案更重要。
尽管如此,我首先要创建一个测试项目来验证针对测试数据库副本的任何方法。这将允许您执行任何可能需要的调整,以便在您的现有代码库中根深蒂固之前让EF使用您的数据库。
您需要知道如何拨打stored procedures。
您可能会使用database first approach。
对于单元测试,您需要选择一个测试框架(MS,NUnit和XUnit似乎最受欢迎)。
你可能需要一个模拟框架(Moq,NSubstitute等)到write tests that don't hit the database。
如果您要开始将代码分解为接口/依赖项以便于测试,您可能还需要查看依赖注入和IOC容器(Unity,Castle Windsor,Ninject)来帮助注入依赖项。
如果您不是已经开始考虑使用接口,那么您就已经开始考虑使用接口,以便将代码的问题分开,并使测试更容易进行模拟。
从您的代码中,一旦您从数据库中读取受保护的字段,并不完全清楚如何使用类中的受保护字段,您可能还需要查看automapper之类的内容。帮助在数据库实体和BL实体之间进行映射。