如何将实体框架与业务对象一起使用

时间:2015-06-17 23:56:53

标签: entity-framework unit-testing ado.net repository-pattern abstract

在我们的解决方案中,我们有这样的业务对象:

[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相关联,但我们希望使用实体框架进行查询,而不是手动编写所有内容。我们希望保留一些存储过程,因为它们中包含业务逻辑,但是大多数存储过程调用我们都希望使用实体框架。

我们如何塑造我们的项目以使用实体框架,一些存储过程,并添加单元测试(我们的代码都没有经过测试)?

会喜欢任何想法。

1 个答案:

答案 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实体之间进行映射。