0

I've got a GridView on a ASP.Net page. I would like to set the DataSource of the Gridview to a trackable collection of Entity Framework objects. I though the code should look like this:

        this.gvMyGridView.DataSource = entity.MyDetailedItems;
        this.gvMyGridView.DataBind();

But this doesn't display any data.

I am using self tracking entities and the MyDetailedItems is a navigation property to rows from another table.

Ladislav Mrnka
  • 360,892
  • 59
  • 660
  • 670
epotter
  • 7,631
  • 7
  • 63
  • 88

2 Answers2

1

EF 4 with self tracking entities does not support lazy loading so you must explicitly load navigation properties if you want to use them. Use either:

// loading entity with related entities
var entity = context.Entities.Include("MyDetailedItems").Single(...);

or

// loading related entities for already loaded entity
context.LoadProperty(entity, "MyDetailedItems");
Community
  • 1
  • 1
Ladislav Mrnka
  • 360,892
  • 59
  • 660
  • 670
0

Yes, it can. If you are not using the lazy loading (LazyLoadingEnabled to true), then these relationships do not automatically load, and you have to do:

if (entity.MyDetailedItems.IsLoaded == false)
    entity.MyDetailedItems.Load();

Before binding, otherwise, if using EF 4 turn on lazy loading enabled, and this no longer becomes a problem.

HTH.

Brian Mains
  • 50,520
  • 35
  • 148
  • 257