Добавление пользовательской бизнес-логики в ASP.NET WebSite с помощью объекта DAL (Уровень доступа к данным)
У меня есть веб-сайт 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 ответ
Итак, я, кажется, ответил на свой вопрос. В нашем недавнем проекте мы использовали набор данных, а не инфраструктуру сущностей, поэтому, когда мы делали представления сетки, мы прикрепляли их к ObjectDataSources, а приведенный выше код предоставлял бизнес-логику, которую можно было бы выбрать в ObjectDataSources. Кроме того, код представлял собой набор функций, включающих адаптеры таблиц. В этом новом проекте, использующем entity, я использовал entityDataSource для вида сетки и решил, что это замена источника данных объекта. Таким образом, решение состояло в том, чтобы снова использовать ObjectDataSources и использовать приведенный выше код, который манипулирует объектами. Я до сих пор не уверен, что это правильное кодирование, но пока оно работает.
Редактировать: Единственное, что плохо в использовании бизнес-логики с каркасом сущностей, это то, что когда вы связываете такие вещи, как gridviews с ObjectDataSources, которые вызывают бизнес-логику, вы должны отключить разбиение на страницы и сортировку. Я обнаружил, что если вы хотите разбивать страницы на страницы и сортировать, вам нужно добавить еще немного кода в бизнес-логику, чтобы он сортировал и разбивал страницы на стороне сервера на сортировку на стороне клиента, поддерживаемую адаптерами таблиц. Довольно больно, но, вероятно, лучше для производительности.