Entity framework EF Codefirst和RDLC报告

Entity framework EF Codefirst和RDLC报告,entity-framework,asp.net-mvc-4,dataset,rdlc,Entity Framework,Asp.net Mvc 4,Dataset,Rdlc,我正在使用EF6开发一个MVC4网络应用程序。我使用EF代码优先的方法(在一个全新的数据库上)。所以我有我在EF中使用的模型类 现在我需要创建一些RDLC报告。为此,我需要创建一个数据集。那么,如何使用模型类创建数据集呢?我需要将模型类之间的关系带到数据集 我的最终目标是使用我的ef模型设计数据并将其填充到报告中 感谢您的支持,通常EF不支持数据集。如果您想用EF加载的数据填充数据集,那么您必须为此提供自己的功能。在这里,我提供了一个示例,说明如何根据查询获得的结果填充DataTable对象:

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

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

我的最终目标是使用我的ef模型设计数据并将其填充到报告中


感谢您的支持,通常EF不支持数据集。如果您想用EF加载的数据填充数据集,那么您必须为此提供自己的功能。在这里,我提供了一个示例,说明如何根据查询获得的结果填充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对象的ChildRelations属性将它们与关系绑定。然后,您可以将数据表对象插入到数据集中

DataTable table = context.People.ToDataTable();