Добавление пользовательской бизнес-логики в ASP.NET WebSite с помощью объекта DAL (Уровень доступа к данным) - PullRequest
0 голосов
/ 08 февраля 2012

У меня есть веб-сайт ASP.NET, который имеет DAL версии 4.0 сущностей.У меня есть несколько страниц с текстовыми полями, в которые можно вводить данные, и сеткой для просмотра и редактирования этих данных.Я использую LINQ для записи логики вставки в коде файла для одной из страниц.Однако я хотел бы реализовать BLL (уровень бизнес-логики), чтобы я мог использовать этот код в нескольких местах и ​​вносить изменения только в одном месте.Во всяком случае, мне нужно вызвать эти функции BLL для конкретной таблицы в коде и я хочу присоединить их к EntityDataSources с помощью графического интерфейса Visual Studio.Мне удалось создать отдельный файл класса для написания собственной логики, но я не вижу, чтобы функции в файле BLL появлялись в раскрывающемся списке EntityDataSources, когда я использую графический интерфейс для выбора отдельного обновления, вставки,и удалите функции.Я украшаю функции в BLL с неправильным свойством?Ниже моя попытка заставить это работать.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using MyTestModel;

/// <summary>
/// Used as custom logic for running queries againts the Location table
/// </summary>
public class LocationBLL
{
    [System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Select, false)]
    public IQueryable<RnLoc> viewLocation(string name)
    {
        MyTestEntities db = new MyTestEntities();
        var L = (from a in db.Location
                   where a.Location == name
                   select a);
        return L;
    }

    [System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Insert, false)]
    public bool InsertLocation(string location, string longName, string comments, bool active, bool current)
    {
        MyTestEntities db = new MyTestEntities();

        Location L = new Location();
        L.Location = location;
        L.LongName = longName;
        L.Comments = comments;
        L.Active = active;
        L.Current = current;

        L.Edited = DateTime.Now;
        L.Created = DateTime.Now;
        L.EditedBy = "EIC";
        L.CreatedBy = "EIC";
        L.AreaID = 1;

        db.AddToLocations(L);
        db.SaveChanges();

        return true;
    }
}

1 Ответ

0 голосов
/ 10 февраля 2012

ОК, так что я, похоже, ответил на свой вопрос.В нашем недавнем проекте мы использовали набор данных, а не структуру сущностей, поэтому, когда мы делали представления сетки, мы прикрепляли их к ObjectDataSources, а приведенный выше код предоставлял бизнес-логику, которую можно было бы выбрать в ObjectDataSources.Кроме того, код представлял собой набор функций, включающих адаптеры таблиц.В этом новом проекте, использующем entity, я использовал entityDataSource для вида сетки и решил, что это замена источника данных объекта.Поэтому решение состояло в том, чтобы снова использовать ObjectDataSources и использовать приведенный выше код, который манипулирует объектами.Я до сих пор не уверен, что это правильное кодирование, но пока оно работает.

Редактировать: Единственное, что плохо в использовании бизнес-логики с каркасом сущностей, это то, что когда вы связываете такие вещи, как gridviews с ObjectDataSources, которые вызываютпо бизнес-логике вы должны отключить пейджинг и сортировку.Я обнаружил, что если вы хотите разбивать страницы на страницы и сортировать, вам нужно добавить еще немного кода в бизнес-логику, чтобы он сортировал и разбивал страницы на стороне сервера на сортировку на стороне клиента, поддерживаемую адаптерами таблиц.Довольно больно, но, вероятно, лучше для производительности.

...