加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

实体框架 – EF Codefirst和RDLC Reports

发布时间:2020-12-15 19:47:34 所属栏目:asp.Net 来源:网络整理
导读:我正在使用EF 6开发一个MVC4 Web应用程序.我正在使用EF代码第一种方法(在一个全新的数据库上).所以我有我在EF中使用的模型类. 现在我需要创建一些RDLC报告.为此,我需要创建一个数据集.那么如何使用我的模型类创建数据集呢?我需要携带到数据集的模型类之间存
我正在使用EF 6开发一个MVC4 Web应用程序.我正在使用EF代码第一种方法(在一个全新的数据库上).所以我有我在EF中使用的模型类.

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

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

在Adance感谢

解决方法

通常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属性将它们与关系绑定.然后您可以将DataTable对象插入到DataSet中.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读