1

我試圖執行工作的單位和通用存儲庫模式作爲解釋這裏導航屬性:指定的包含路徑無效。該的EntityType「* Propiedad」沒有聲明名稱爲「農佈雷」

http://www.asp.net/mvc/overview/older-versions/getting-started-with-ef-5-using-mvc-4/implementing-the-repository-and-unit-of-work-patterns-in-an-asp-net-mvc-application

我的實體Propiedad是像這樣:

public class Propiedad 
    { 
     [Key] 
     public int Id { get; set; } 

     public virtual Entidad Entidad { get; set; } 

     public string Codigo { get; set; } 
     public string Nombre { get; set; } 
     public string TipoDeDatos { get; set; } 
    } 

所在行的失敗實際上其索引操作

public ActionResult Index() 
    { 
     return View(unitOfWork.PropiedadRepository.Get(includeProperties:"Nombre, Codigo, TipoDeDatos").ToList()); 
    } 

的通用倉庫等級:

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

     public GenericRepository(AppDataContext context) 
     { 
      this.context = context; 
      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(); 
      } 
     } 

     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 class UnitOfWork : IDisposable 
    { 
     private AppDataContext context = new AppDataContext(); 
     private GenericRepository<Empresa> empresaRepository; 
     private GenericRepository<Propiedad> propiedadRepository; 
     private GenericRepository<Entidad> entidadRepository; 

     public GenericRepository<Empresa> EmpresaRepository 
     { 
      get 
      { 

       if (this.empresaRepository == null) 
       { 
        this.empresaRepository = new GenericRepository<Empresa>(context); 
       } 
       return empresaRepository; 
      } 
     } 

     public GenericRepository<Propiedad> PropiedadRepository 
     { 
      get 
      { 

       if (this.propiedadRepository == null) 
       { 
        this.propiedadRepository = new GenericRepository<Propiedad>(context); 
       } 
       return propiedadRepository; 
      } 
     } 

     public GenericRepository<Entidad> EntidadRepository 
     { 
      get 
      { 

       if (this.entidadRepository == null) 
       { 
        this.entidadRepository = new GenericRepository<Entidad>(context); 
       } 
       return entidadRepository; 
      } 
     } 
     public void Save() 
     { 
      context.SaveChanges(); 
     } 

     private bool disposed = false; 

     protected virtual void Dispose(bool disposing) 
     { 
      if (!this.disposed) 
      { 
       if (disposing) 
       { 
        context.Dispose(); 
       } 
      } 
      this.disposed = true; 
     } 

     public void Dispose() 
     { 
      Dispose(true); 
      GC.SuppressFinalize(this); 
     } 
    } 

的單位不過,我得到這個錯誤: 一個指定的包含路徑無效。 EntityType'* Propiedad'沒有聲明名爲'Nombre'的導航屬性。

但Propiedad實體有一個名爲Nombre的屬性,所以我不明白它爲什麼失敗。

回答

3

Include是急於加載navigation properties,這意味着任何屬性,實際上,another related entity。由於Nombre是一個字符串,因此不需要包含它:它是從數據庫調用返回的實體的一部分。如果Nombre是代表數據庫實體的類,那麼可以包含它。

相關問題