Как использовать LINQ to SQL и сетку DevExpress, реализуя определения методов расширяемости? - PullRequest
1 голос
/ 13 ноября 2011

Используя ASP.NET MVC, я использовал конструктор для создания класса Product и отображения его в сетке DevExpress.

При сохранении изменений в сетке работает следующий метод:

    [HttpPost]
    public ActionResult ProductGridPartialUpdate([ModelBinder(typeof(DevExpressEditorsBinder))] Product prod)
    {
        var EditProd = db.Products.Single(p => p.Id == prod.Id);
        if (EditProd != null)
        {
            EditProd.ProductCode = prod.ProductCode;
            EditProd.ProductTitle = prod.ProductTitle;
            EditProd.BinNo = prod.BinNo;
            db.SubmitChanges();
        }

        var q = from p in db.Products select p;
        return PartialView("ProductGridPartial", q);
    }

Но из того, что я читал, я думал, что это будет работать примерно так:

    [HttpPost]
    public ActionResult ProductGridPartialUpdate([ModelBinder(typeof(DevExpressEditorsBinder))] Product prod)
    {
        db.UpdateProduct(prod);

        var q = from p in db.Products select p;
        return PartialView("ProductGridPartial", q);
    }

Или:

    [HttpPost]
    public ActionResult ProductGridPartialUpdate([ModelBinder(typeof(DevExpressEditorsBinder))] Product prod)
    {
        db.SubmitChanges();

        var q = from p in db.Products select p;
        return PartialView("ProductGridPartial", q);
    }

Мой метод - "правильный" способ сделать это, или есть какой-то традиционный способ заставить эти два примера работать? Я вижу в автоматически сгенерированном файле конструктора, он получил следующий кусок кода:

#region Extensibility Method Definitions
partial void OnCreated();
partial void InsertProduct(Product instance);
partial void UpdateProduct(Product instance);
partial void DeleteProduct(Product instance);
#endregion

Но когда я не уверен, что должно быть в частичном методе UpdateProduct, и когда я добавил следующий код в новый файл с именем db.UpdateProduct (prod), я получаю сообщение об ошибке: «недоступен из-за до уровня защиты ". Код, который я пробовал, был:

namespace TradeMeStore.Models
{
    partial class TradeMeStoreDataContext
    {
        partial void UpdateProduct(Product instance)
        {
            ExecuteDynamicUpdate(instance);
        }
    }
}

1 Ответ

1 голос
/ 13 ноября 2011

Первый подход более предпочтителен.Это общая логика для операций CRUD:

http://weblogs.asp.net/scottgu/archive/2007/05/19/using-linq-to-sql-part-1.aspx

  • Создать экземпляр DataContext;

  • Получить отредактированный DataItem;

  • Изменить свойства DataItem;

  • Отправить изменения.

ЕслиЕсли вы хотите реализовать пользовательские функции CRUD, вам следует беспокоиться о целостности данных.

недоступен из-за уровня защиты

Отметьте оба класса «TradeMeStoreDataContext»и метод «UpdateProduct» как открытый.

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