Проблема Entity Framework - ASP.NET 4 MVC 3 - Проект SportsStore - PullRequest
4 голосов
/ 13 сентября 2011

(Apress PRO: ASP.NET MVC 3 Framework - от Адама Фримена и Стивена Сандерсона - третье издание)

( В качестве хедс-апа: Я новичок в ASP.NETи создание многопроектных решений в Visual Studio.)

Я очень хорошо следовал в книге вплоть до страницы 298. (Я использую SQL Express.) Я столкнулся с проблемой при попыткескомпилировать и запустить мое решение в Visual Studio 2010 (SP1).

Проблема возникает, когда я добавляю модель данных объекта ADO.NET (файл .edmx) в мой проект SportsStore.Domain в папке Concrete / ORM /(что странно ... книга на стр. 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, solutionation компилируется успешно -> но, конечно, я не могу использовать новые свойства изображения для добавления изображений в базу данных.На странице 291 указано, почему: нет связи между новыми столбцами в Таблице продуктов и в классе продуктов.(Я могу найти и выбрать изображение (на диске) на веб-странице и нажать «Отправить», но после этого ничего не добавляется в базу данных.)

Я не уверен, с чего начать.Если это поможет показать больше моего проекта, я определенно это сделаю.(это в значительной степени идентично книге.)

(На самом деле была еще одна загвоздка с классом Product в SportsStore.Domain.Entities. Метод ActionResult Edit (...) "из AdminController в SportsStore.WebUI.Controllers не понравилось свойство ImageData продукта, объявленное как байт , а не байт [] . Я исправил это, конечно. Должен ли ясообщить, что в книге опечатки?)

Ответы [ 2 ]

2 голосов
/ 27 декабря 2011

Я прошел через ту же проблему, и вот как я ее исправил.

  1. Не добавлять файл edmx
  2. Обновите метод SaveProduct в EFProductRepository.cs

Примерно так:

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();
    }
1 голос
/ 29 сентября 2011

У меня возникла та же самая проблема, и я решил ее, полностью избавившись от файла .edmx.Изображения, кажется, сохраняются и отображаются нормально без него.Просто убедитесь, что ваш db, контроллер и вид соответствуют тому, что в книге.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...