我正在使用EF 6开发一个MVC4网络应用程序。我正在使用EF代码第一种方法(在一个全新的数据库上)。所以我有我在EF中使用的模型类。
现在我需要创建一些RDLC报告。为此,我需要创建一个数据集。那么如何使用我的模型类创建数据集呢?模型类之间存在关系,我需要将这些关系带到数据集中。
我的最终目标是使用我的ef模型为我的报告设计和填充数据。
感谢Adance
答案 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对象。