2011-07-15 9 views

Respuesta

0

No hay equivalente en el momento.

Puede intentarlo sin embargo, asumiendo que no hará ningún cambio en la categoría.

Entity Framework 4.0:

Category cat = new Category(); 
cat.Id = i; 
context.Attach("Categories", cat); 
product.Categories.Add(cat); 

Entity Framework 4.1:

Category cat = new Category(); 
cat.Id = i; 
context.Categories.Attach(cat); 
product.Categories.Add(cat); 

MSDN link

+0

estoy usando DbContext, no ObjectContext – Hao

+0

Sólo un pequeño cambio con EF4.1: context.Categories.Attach (cat); – BennyM

2

Estos son algunos métodos de extensión que he creado para emular carga de NHibernate. El segundo es para entidades con claves compuestas. Mucho más feo de usar que el primero, pero funciona.

public static class EntityFrameworkExtensions 
{ 
    public static TEntity LoadEntity<TEntity,TId>(this DbContext context, TId id) where TEntity : EntityBase<TId>, new() 
    { 
     var entity = context.ChangeTracker.Entries<TEntity>().SingleOrDefault(e => e.Entity.Id.Equals(id))?.Entity; 

     if (entity == null) 
     { 
      entity = new TEntity { Id = id }; 
      context.Set<TEntity>().Attach(entity); 
     } 

     return entity; 
    } 

    public static TEntity LoadEntity<TEntity>(this DbContext context, Func<TEntity, bool> predicate, Action<TEntity> idAssignmentAction) where TEntity : class, new() 
    { 
     var entity = context.ChangeTracker.Entries<TEntity>().SingleOrDefault(e => predicate(e.Entity))?.Entity; 

     if (entity == null) 
     { 
      entity = new TEntity(); 
      idAssignmentAction(entity); 
      context.Set<TEntity>().Attach(entity); 
     } 

     return entity; 
    } 
} 

Ejemplo de uso:

var account = _dbContext.LoadEntity<Account, int>(request.AccountId); 

var composite = _dbContext.LoadEntity<AccountWithComposite>(a => a.X == 1 && a.Y == 2, a => { a.X = 1; a.Y = 2; }); 
Cuestiones relacionadas