想要在主键上连接两个表,在一个视图中显示结果

时间:2016-04-29 09:08:46

标签: asp.net-mvc entity-framework asp.net-mvc-4

IQueryable<Product> product = objContext.Set<Product>().Include(p => 
p.Categories.Name).Where(p => p.Id == 2);

根据目前的观点,我收到了一个错误。它说添加其他模型的属性。即包括类别模型和相应的名称属性。

@model IEnumerable<>crudOneToMany.Models.Product>

使用viewmodel,是否可以加入两个表?

View

错误 指定的包含路径无效。 EntityType“crudOneToMany.Models.Category”未声明名称为“Name”的导航属性。

 public class Product  
    {  
        public int Id { get; set; }  
        public string Name { get; set; }  
        public string Description { get; set; }  
        public int CategoryId { get; set; }  

        public virtual Category Categories { get; set; }  
    }


public class Category  
    {  
        public int Id { get; set; }  
        public string  Name { get; set; }  

        public ICollection<Product> Products { get; set; }  
    }  


public class ProductDBContext : DbContext
    {
        public ProductDBContext()
            : base("ProductDBContext")
        {

        }

        public DbSet<Product> Products { get; set; }
        public DbSet<Category> Categories { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Product>().HasRequired(o => o.Categories).WithMany(o => o.Products).HasForeignKey(o => o.CategoryId);
            base.OnModelCreating(modelBuilder);
        }
    }

2 个答案:

答案 0 :(得分:0)

以下是您提出的ViewModel

ProductViewModel.cs

public class ProductViewModel
    {
        public int Id { get; set; }

        [Required(ErrorMessage = "required")]
        public string ProductName { get; set; }

        public Category  Category  { get; set; }

        public ICollection<Category> Categories { get; set; }
   }

请仔细阅读下面提到的关于ViewModel的文章。如果您有任何问题,请在下面发表评论。我会给予支持。

How to Use ViewModel with ASP.NET MVC

答案 1 :(得分:0)

你的问题在这里:

.Include(p => p.Categories.Name)

相反,你应该写.Include(p => p.Categories) 这意味着在输出中将会有类别导航集合加载到产品中。 Name是简单的字符串属性(不是导航属性,因此不应包括在内)