2011-12-13 19 views
8

我收到以下錯誤歸因組件:實體框架4.2「的類型不是與EdmEntityTypeAttribute歸因但包含在與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(); 
    } 
} 

怪異的一部分被法官歸因與EdmEntityTypeAttribute的,因爲它被自動

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

在一個點上我確實有另一類法官在不同的組件上的DbContext T-4爵士樂的一部分。產生但我已經改名了。我已經嘗試清理這兩個項目。除EF外,不應該有其他的評判班。

所以我無法弄清楚這個其他法官類來自哪裏?

謝謝

+0

嘗試刪除bin和obj文件夾以確保沒有任何東西存活。 – tster

+0

試過,仍然得到相同的錯誤。 – bulltorious

+0

在我上一份工作中,我偶爾會遇到這樣的錯誤,但是我不能爲了我的生活而記住我是如何修復它的。如果這是一個答案,我會自己標記它是無用的程度。 – tster

回答

15

想通了。

當我第一次啓動程序時,我正在使用ObjectContext和.edmx。

然後我讀了關於EF 4.2並決定使用DbContext。

問題是我的.edmx文件正在生成類,以及DbContext T-4s。

解決方案是關閉.edmx中的代碼生成。

所以現在只有DbContext T-4s生成我的POCO類。

希望這個問題可以幫助未來的其他人!

+0

現在是你拯救我的時代的未來;) –

0

我有一個類似的問題 - 在某些情況下(例如,使用WCF Data Services 5.2.0時),在EDMX/model-第一個/生成的類。對我來說,將DbContext類移動到一個單獨的程序集中解決了這個問題。

請注意,在訪問數據庫時,我在同一程序集中沒有出現代碼優先+模型優先的問題。但只要我添加了另一個圖層(WCF數據服務),我遇到了EdmSchemaAttribute錯誤。