C# 实体框架问题-ASP.NET 4 MVC 3-SportsStore项目

C# 实体框架问题-ASP.NET 4 MVC 3-SportsStore项目,c#,visual-studio-2010,asp.net-mvc-3,entity-framework-4,C#,Visual Studio 2010,Asp.net Mvc 3,Entity Framework 4,(Apress PRO:ASP.NET MVC 3框架-由Adam Freeman和Steven Sanderson编写-第三版) (作为提示:我对ASP.NET和在Visual Studio中构建多项目解决方案不熟悉。) 直到第298页,我一直很好地理解了这本书。(我正在使用SQLExpress。)当我试图在VisualStudio2010(SP1)中编译和运行我的解决方案时遇到了一个障碍 当我将ADO.NET实体数据模型(.edmx文件)添加到我的SportsStore.Domain项目的C

(Apress PRO:ASP.NET MVC 3框架-由Adam Freeman和Steven Sanderson编写-第三版)

作为提示:我对ASP.NET和在Visual Studio中构建多项目解决方案不熟悉。)

直到第298页,我一直很好地理解了这本书。(我正在使用SQLExpress。)当我试图在VisualStudio2010(SP1)中编译和运行我的解决方案时遇到了一个障碍

当我将ADO.NET实体数据模型(.edmx文件)添加到我的SportsStore.Domain项目的Concrete/ORM/folder下(这很奇怪…第291页上的书让人觉得该文件应该已经存在了…)时,就会出现问题

。。。我在实体设计器中更新/刷新模型,以包含两个新属性(ImageData和ImageMimeType)-->编译器在以下情况下引发异常:

using SportsStore.Domain.Abstract;
using SportsStore.WebUI.Models;
using SportsStore.Domain.Entities;

namespace SportsStore.WebUI.Controllers {
    public class ProductController : Controller {

        public ViewResult List(string category, int page = 1) {
            ProductsListViewModel viewModel = new ProductsListViewModel {
                Products = repository.Products
                    .Where(p => category == null || p.Category == category)
                    .OrderBy(p => p.ProductID)
                    .Skip((page - 1) * PageSize)
                    .Take(PageSize),
                PagingInfo = new PagingInfo { 
                     CurrentPage = page,
                     ItemsPerPage = PageSize,
                     TotalItems = category == null ?
                         repository.Products.Count() :
                         repository.Products.Where(e => e.Category == category).Count()
                },
                CurrentCategory = category
            };

            return View(viewModel);
        }
    }
}
说“找不到SportsStore.Domain.Concrete.ORM.Product的概念模型类型。”

删除.edmx文件时,解决方案会成功编译-->但当然,我无法使用新的图像属性将图片添加到数据库中。第291页说明了原因:产品表中的新列和产品类之间没有连接。(我可以在网页上找到并选择一个图像(在磁盘上),然后点击提交,但之后不会向数据库添加任何内容。)

我真的不知道从哪里开始。如果这将有助于显示我的项目,我肯定会更多。(这和这本书的内容几乎一模一样。)


(实际上,sportstore.Domain.Entities下的Product类存在另一个障碍。sportstore.WebUI.Controllers下AdminController的“ActionResult Edit(…)”方法不喜欢将产品的ImageData属性声明为byte而不是byte[]。我当然解决了这个问题。我应该在书的勘误表中报告吗?

我遇到了同样的问题,并通过完全删除.edmx文件来解决它。没有它,图像似乎保存和显示得很好。只需确保您的数据库、控制器和视图与书中的内容一致即可

我也遇到了同样的问题,下面是我如何解决的

  • 不要添加edmx文件
  • 更新EFProductRepository.cs中的SaveProduct方法
  • 大概是这样的:

    public void SaveProduct(Product product)
        {
            if (product.ProductID == 0)
            {
                context.Products.Add(product);
            }
            else
            {
                Product prod = context.Products.Where(p => p.ProductID == product.ProductID).FirstOrDefault();
                prod.Category = product.Category;
                prod.Description = product.Description;
                prod.ImageData = product.ImageData;
                prod.ImageMimeType = product.ImageMimeType;
                prod.Name = product.Name;
                prod.Price = product.Price;
            }
            context.SaveChanges();
        }
    
    我认为这不是最好的方法,因为我们是手工绘制地图的

    编辑:更好的方法

    public void SaveProduct(Product product)
        {
            if (product.ProductID == 0)
            {
                context.Products.Add(product);
            }
            else
            {
                context.Entry(product).State = EntityState.Modified;
            }
            context.SaveChanges();
        }
    

    我一直无法得到工作的来源有人可以压缩一个工作版本?我在编译方面做得很好,但它似乎与Ninject有问题