EF5 a EntityDataSource

Keď sa náhodou bude niekto hrať na pet projekte s Entity Framework 5, možno sa zíde kód dolu. Nový Context má poriešený našťastie wrapper, ktorý som si náhodou už predtým všimol, takže výskum a hľadanie riešenia bolo o pár sekundách. (Spoliehame sa, že bazový kontext porieši handlovanie ContextTypeName a nastaví na základe nej ContextType, takže je to použiteľné aj z templatne).

using System.Data.Entity.Infrastructure;
using System.Data.Entity;
namespace My.Web.UI.WebControls
{
    public class Entity5DataSource : EntityDataSource
    {
        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);
            //event desing pattern rulez by MS! :-)
            ContextCreating += Entity5DataSource_ContextCreating;
        }
        void Entity5DataSource_ContextCreating(object sender, EntityDataSourceContextCreatingEventArgs e)
        {
            if (ContextType == null)
                return;
            var context= (DbContext) Activator.CreateInstance(ContextType);
            e.Context = ((IObjectContextAdapter)context).ObjectContext;
        }
    }
}
 
UPDATE:

Ak chcete používať nový typový binding (GridView.ItemType a syntax <%# Item.LastName %>) musíte zrušiť generovanie wrapperu. Stačí ak prídate do OnInit alebo to budete nastavovať priamo na DataSource

EnableFlattening = false;

Komentáre

Bez komentárov

Prihlásiť | Registrovať | Pomoc