2014-04-28 22 views
5

EF 6 ile MVC4 web uygulaması üzerinde çalışıyorum. EF kodu ilk yaklaşımını (yepyeni bir veritabanında) kullanıyorum. Bu yüzden EF'de kullandığım model sınıflarım var.
EF Codefirst ve RDLC Raporları

Şimdi bazı RDLC Raporları oluşturmam gerekiyor. Bunu yapmak için bir Veri Kümesi oluşturmam gerekiyor. Peki, model derslerimi kullanarak nasıl bir veri seti oluşturabilirim? Veri kümesine taşımam gereken model sınıfları arasında ilişkiler vardır.

Nihai hedefim, ef modellerimi kullanarak raporumun verilerini tasarlayıp doldurmaktır. Adance

yılında

Teşekkür

cevap

3

Genellikle EF DataSets desteklemez. DataSet'leri EF ile yüklenen verilerle doldurmak isterseniz, bunun için kendi işlevlerinizi sağlamanız gerekir. İşte nasıl sorgusu ile elde edilen sonucu elde DataTable nesnesini doldurmak için bir örnek sunuyoruz:

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; 
    } 
} 

Bu uzantı yöntemi olarak daha sonra kullanabileceği aşağıdaki gibidir:

DataTable table = context.People.ToDataTable(); 

sonra tablolar arasındaki ilişkileri uygulamak istiyorsanız Yapmanız gereken mantık daha karmaşık olacaktır. İlişkilendirmek için DataTable nesnelerinin ChildRelations özelliğini kullanmalısınız. Ardından DataSet'e ekleyebileceğiniz DataTable nesneleriniz.