0

我很难为此想出一个标题:)

我有一个连接到 SQL 服务器数据库的 WCF 服务。我使用 ADO.NET 从数据库中检索数据。

在一些简单的操作中,我只是从数据库中检索,然后发回我刚刚获取的 EntityObjects 的 json 表示,它工作正常。但是现在我正在使用一个过程进行更复杂的提取。数据检索工作正常,但过程本身返回的列比实际 EntityObject (Table) 的列多。以此为例:

create table Person
{
    Name,
    BirthDate
}

// Retrieve Persons from DB with procedure that also calculates each persons actual age!
public List<EntityObject> GetPersons()
{
    var personList = new List<EntityObject>();
    var dataSet = dbContext.ExceuteProcedure("GET_PERSONS_WITH_AGE", parameters);

    var dataTable = dataSet.Tables["result"];

    foreach (DataRow row in dataTable.Rows)
    {
        personList.Add( new PersonEntity
        {
            Name = (String)row["Name"],
            BirthDate = (DateTime)row["BirthDate"],
            // Here i want the actual age calculation result, but since the DB-table Person does'nt have this column,
            // I can't set it.
        }
    }

    return personList;
}

我是否需要为此创建一个具有此额外变量的 CustomPersonClass?或者我可以在我的 ADO.NET 对象中以某种方式将另一列强制放入 Table Person 中吗?

请考虑到我是 ADO.NET 的新手,如果您在我的示例中看到其他代码错误(以及检索方法),请告诉我。

4

1 回答 1

1

您可以在这里考虑一个 DTO,一个数据传输对象,这解决了 getPersons 的调用者/客户端的考虑,并将作为 JSON 生成返回给客户端。称它为 PersonDTO 或 PersonResponse。它与 getPersons() 方法位于同一个类中,并且是一个公共类。将 getPersons() 的签名更改为List<PersonDTO> getPersons(). 我还会将 GetPersons() 大写,因为它是一种公共方法。

public class PersonDTO
{
    property string Name;
    property string BirthDate;
    property string Age;
}

// Retrieve Persons from DB with procedure that also calculates each persons actual age!
public List<PersonDTO> getPersons()
{
    var personList = new List<PersonDTO>();
    var dataSet = dbContext.ExceuteProcedure("GET_PERSONS_WITH_AGE", parameters);

var dataTable = dataSet.Tables["result"];

foreach (DataRow row in dataTable.Rows)
{
    personList.Add( new PersonDTO
    {
        Name = (String)row["Name"],
        BirthDate = (DateTime)row["BirthDate"],
        // Here i want the actual age calculation result, but since the DB-table Person does'nt have this column,
        // I can't set it.
    }
}

return personList;
}
于 2013-09-15T00:23:19.313 回答