2011-07-15 4 views

Odpowiedz

0

Nie ma odpowiednika w tej chwili.

Możesz spróbować tego jednak, zakładając, że nie wprowadzisz żadnych zmian w kategorii.

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

mi stosując DbContext nie ObjectContext – Hao

+0

tylko jedna mała zmiana z EF4.1: context.Categories.Attach (kat); – BennyM

2

Oto kilka metod przedłużania mojego autorstwa naśladować Załaduj NHibernate jest. Drugi dotyczy podmiotów z kluczami złożonymi. Brzydsze w użyciu niż pierwsze, ale działa.

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

Przykład użycia:

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