EF Code First和RDLC报告

时间:2014-04-28 14:07:27

标签: entity-framework asp.net-mvc-4 dataset rdlc

我正在使用EF 6开发一个MVC4网络应用程序。我正在使用EF代码第一种方法(在一个全新的数据库上)。所以我有我在EF中使用的模型类。

现在我需要创建一些RDLC报告。为此,我需要创建一个数据集。那么如何使用我的模型类创建数据集呢?模型类之间存在关系,我需要将这些关系带到数据集中。

我的最终目标是使用我的ef模型为我的报告设计和填充数据。

感谢Adance

1 个答案:

答案 0 :(得分:3)

通常EF不支持DataSet。如果要使用加载了EF的数据填充DataSet,那么您必须为此提供自己的功能。这里我举一个例子,说明如何从查询获得的结果中填充DataTable对象:

public static class IEnumerableExtensions
{
    public static DataTable ToDataTable<TEntity>(this IEnumerable<TEntity> entities)
    {
        DataTable table = new DataTable();
        IEnumerable<PropertyInfo> properties = typeof(TEntity)
            .GetProperties()
            .Where(p => !p.PropertyType.IsClass || p.PropertyType == typeof(string))
        foreach(string propertyName in properties.Select( p => p.Name))
        {
            table.Columns.Add(propertyName);
        }
        foreach(object item in entities)
        {
            List<object> propertiesValues = new List<object>();
            foreach (PropertyInfo property in properties)
            {
                propertiesValues.Add(property.GetValue(item));
            }
            table.Rows.Add(propertiesValues.ToArray());
        }
        return table;
    }
}

您可以按如下方式使用此扩展方法:

DataTable table = context.People.ToDataTable();

如果要实现表之间的关系,那么您需要做的逻辑将更加复杂。您应该使用DataTable对象的ChildRelations属性将它们与关系绑定。然后你可以插入到DataSet中的DataTable对象。