2011-12-13 2 views
8

otrzymuję następujący błąd:Entity Framework 4.2 „Typ nie jest przypisana z EdmEntityTypeAttribute ale jest zawarta w zespole nadana z EdmSchemaAttribute

System.InvalidOperationException was unhandled Message=The type 'Judge' is not attributed with EdmEntityTypeAttribute but is contained in an assembly attributed with EdmSchemaAttribute. POCO entities that do not use EdmEntityTypeAttribute cannot be contained in the same assembly as non-POCO entities that use EdmEntityTypeAttribute.
Source=EntityFramework StackTrace: at System.Data.Entity.Internal.InternalContext.UpdateEntitySetMappingsForType(Type entityType) at System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType)....

public class GenericRepository<TEntity> where TEntity : class 
{ 
    internal z context; 
    internal DbSet<TEntity> dbSet; 

    public GenericRepository(z context) 
    { 
     this.context = context; 
     this.dbSet = context.Set<TEntity>(); 
    } 

    public GenericRepository() 
    { 
     this.context = new z(); 
     this.dbSet = context.Set<TEntity>(); 
    } 

    public virtual IEnumerable<TEntity> Get(
     Expression<Func<TEntity, bool>> filter = null, 
     Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null, 
     string includeProperties = "") 
    { 

     IQueryable<TEntity> query = dbSet; 

     if (filter != null) 
     { 
      query = query.Where(filter); 
     } 

     foreach (var includeProperty in includeProperties.Split 
      (new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) 
     { 
      query = query.Include(includeProperty); 
     } 

     if (orderBy != null) 
     { 
      return orderBy(query).ToList(); 
     } 
     else 
     { 
      return query.ToList(); //Getting error here!! 
     } 
    } 

    public virtual TEntity GetByID(object id) 
    { 
     return dbSet.Find(id); 
    } 

    public virtual void Insert(TEntity entity) 
    { 
     dbSet.Add(entity); 
    } 

    public virtual void Delete(object id) 
    { 
     TEntity entityToDelete = dbSet.Find(id); 
     Delete(entityToDelete); 
    } 

    public virtual void Delete(TEntity entityToDelete) 
    { 
     if (context.Entry(entityToDelete).State == EntityState.Detached) 
     { 
      dbSet.Attach(entityToDelete); 
     } 
     dbSet.Remove(entityToDelete); 
    } 

    public virtual void Update(TEntity entityToUpdate) 
    { 
     dbSet.Attach(entityToUpdate); 
     context.Entry(entityToUpdate).State = EntityState.Modified; 
    } 

    public virtual void Save() 
    { 
     context.SaveChanges(); 
    } 
} 

Upiorna część jest sędzia jest przypisany z EdmEntityTypeAttribute , ponieważ jest on generowany automatycznie jako część DbContext T-4 jazzu.

/// <summary> 
/// No Metadata Documentation available. 
/// </summary> 
[EdmEntityTypeAttribute(NamespaceName="standaloneModel", Name="Judge")] 
[Serializable()] 
[DataContractAttribute(IsReference=true)] 
public partial class Judge : EntityObject 
{ 

w pewnym momencie miałem innej klasy sędziego w innym zespole, ale zmieniłem nazwę. Próbowałem oczyścić oba projekty. Nie powinno być żadnych innych klas sędziów poza EF.

Więc nie mogę się dowiedzieć, skąd pochodzi ta druga klasa sędziów?

Dzięki

+0

Spróbuj usunąć foldery bin i obj, aby upewnić się, że nic nie przeżyje. – tster

+0

Próbowałem tego, wciąż otrzymuję ten sam błąd. – bulltorious

+0

W mojej ostatniej pracy od czasu do czasu dostałem tego błędu, ale nie mogę do końca życia pamiętać, jak to naprawiłem. Gdyby to była odpowiedź, sam ją oznaczyłbym, ponieważ jest to bezużyteczne. – tster

Odpowiedz

15

Wyliczyłem to.

Podczas pierwszego uruchomienia programu korzystałem z ObjectContext z rozszerzeniem .edmx.

Potem czytałem o EF 4.2 i zdecydowałem się użyć DbContext.

Problemem był mój plik .edmx generujący klasy, a także DbContext T-4s.

Rozwiązaniem było wyłączenie generowania kodu w rozszerzeniu .edmx.

Teraz tylko DbContext T-4s generują moje klasy POCO.

Mam nadzieję, że to pytanie pomoże komuś innemu w przyszłości!

+0

Teraz jest przyszłość, w której oszczędzasz moje czasy;) –

0

Miałem podobny problem - wydaje się, że w niektórych przypadkach (na przykład przy korzystaniu z usług WCF Data Services 5.2.0), problemem jest posiadanie klas najpierw kodu/DbContext w tym samym zestawie, co EDMX/model- pierwsze/wygenerowane klasy. Dla mnie przeniesienie klas DbContext do osobnego zestawu naprawiło problem.

Należy zauważyć, że nie miałem problemu z pierwszym kodowaniem i pierwszym modelem w tym samym zestawie, gdy tylko uzyskuję dostęp do bazy danych. Ale jak tylko dodałem kolejną warstwę (WCF Data Services), natrafiłem na błąd EdmSchemaAttribute.

Powiązane problemy