向具有实体DAL(数据访问层)的ASP.NET网站添加自定义业务逻辑



我有一个ASP.NET网站,它的实体版本为4.0 DAL。我有几个页面有文本框,你可以在其中输入数据,并通过gridview查看和编辑数据。我正在使用LINQ在其中一个页面的代码隐藏文件中编写插入逻辑。然而,我想实现一个BLL(业务逻辑层),这样我就可以在几个地方使用这些代码,而只在一个地方进行修改。无论如何,我需要为代码隐藏中的特定表调用这些BLL函数,并且我希望使用visualstudio的GUI将它们附加到EntityDataSources。我已经设法制作了一个单独的类文件来编写我的自定义逻辑,但当我使用GUI选择单独的更新、插入和删除函数时,我无法使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;
    }
}

好吧,所以我似乎已经回答了自己的问题。在我们最近的项目中,我们使用的是数据集,而不是实体框架,所以当我们制作网格视图时,我们将它们附加到ObjectDataSources,上面的代码将提供在ObjectDataSources中可选择的业务逻辑。此外,代码是一组涉及表适配器的函数。在这个使用实体的新项目中,我为网格视图使用了entityDataSource,并认为它是对象数据源的替代品。因此,解决方案是再次使用ObjectDataSources,并使用上面操纵实体的代码。我仍然不确定这是否是正确的编码,但它目前有效。

编辑:在实体框架中使用业务逻辑唯一不好的地方是,当您将网格视图之类的东西绑定到调用业务逻辑的ObjectDataSources时,必须禁用分页和排序。我发现,如果你想要分页和排序,你必须向业务逻辑添加更多的代码,这样它就可以对服务器端进行排序和分页,而不是表适配器支持的客户端排序。相当痛苦,但可能对性能更好。

最新更新