如何从数据库序列化自定义数据?

时间:2009-06-04 06:20:42

标签: c# database serialization

我有一张这样的桌子:

ID  Name        Key     Value
1   Mydata1     Mail        myval1
1   Mydata1     Name        myval2
1   Mydata1     Nick        myval3
1   Yourdata    key2        myval4

和这样的课程:

[Serializable]
public class Mydata
{
    public string Mail{get;set;}
    public string Name{get;set;}
    public string Nick{get;set;}
}

我从表数据中提取 其中Name ='MyData1'在列表中。

如何在我的班级中序列化这些数据。 谢谢!

2 个答案:

答案 0 :(得分:1)

您应该查看LINQ to SQL,LINQ to Entities,NHibernate等。这些是OR Mappers或Object / Relational Mappers。它们旨在为您查询数据库,并从您的域返回序列化对象。它们可以大大减少使用持久化和从数据库服务器检索的对象构建应用程序所需的工作量。

请注意,Linq to SQL需要SQL Server,而其他两个可以与任何数据库一起使用。

答案 1 :(得分:0)

如果您已经上课,那么您正在寻找ORM中的“POCO”支持。

E.g。实体框架v4执行此操作。见here for details。我知道nHibernate今天有这种支持。

或者在您的数据访问层中,您可以使用数据阅读器在数据访问层(DTO == Data Transfer Object)中进行转换:

var rs = dbCmd.ExecuteReader();
var results = new List<MyDto>();
while (rs.Read()) {
  results.Add(new MyDto {
    Id = rs.ReadInt("Id"),
    Name = rs.ReadString("Name"),
    ...
  };
}

使用LINQ to SQL:

using (var dc = MyDataContext()) {
  var results = from d in dc.MyDataType
                select new MyDto {
                  Id = d.Id,
                  Name = d.Name,
                  ...
                };
}

但是我倾向于添加一个方法来使用帮助器方法自定义生成的实体来执行映射(这有助于避免重复每个查询的属性复制代码)。