Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
asp.net中的实体框架和业务层_Asp.net_.net_Entity Framework_Design Patterns - Fatal编程技术网

asp.net中的实体框架和业务层

asp.net中的实体框架和业务层,asp.net,.net,entity-framework,design-patterns,Asp.net,.net,Entity Framework,Design Patterns,我正在尝试将业务层添加到我的简单web应用程序中。 为me类生成的EF,如User,Lang 我当前的BL如下所示: public class BLuser { public static List<User> allUsers() { using (MyEntities ctx = new MyEntities()) { var users = from us i

我正在尝试将业务层添加到我的简单web应用程序中。
为me类生成的EF,如
User
Lang

我当前的BL如下所示:

public class BLuser
    {
        public static List<User> allUsers()
        {
            using (MyEntities ctx = new MyEntities())
            {
                var users = from us in ctx.Users select us;
                return users.ToList<User>();
            }
        }


        public static int getUsersLangId(int id)
        {
            using (MyEntities ctx = new MyEntities())
            {
                var langid = (from us in ctx.Users where us.Id == id select us.Lang.Id).FirstOrDefault();
                return langid;
            }
        }

        public static void changeUsersLangId(int userId, int langId)
        {
            using (MyEntities ctx = new MyEntities())
            {
                var user = (from us in ctx.Users where us.Id == userId select us).FirstOrDefault();
                user.LangId = langId;
                ctx.SaveChanges();
            }
        }

        public static void addNewUser(int userId)
        {
            User newUser = new User();
            newUser.Id = userId;
            newUser.LangId = 0;

            using (MyEntities ctx = new MyEntities())
            {
                ctx.Users.Add(newUser);
                ctx.SaveChanges();
            }
        }

    }
public-class-bluer
{
公共静态列表诱惑者()
{
使用(MyEntities ctx=new MyEntities())
{
var users=在ctx中来自我们。用户选择我们;
返回users.ToList();
}
}
公共静态int getUsersLangId(int id)
{
使用(MyEntities ctx=new MyEntities())
{
var langid=(来自ctx.Users中的us,其中us.Id==Id选择us.Lang.Id);
返回langid;
}
}
公共静态void changeurslandgid(int-userId,int-langId)
{
使用(MyEntities ctx=new MyEntities())
{
var user=(来自ctx.Users中的us,其中us.Id==userId选择us);
user.LangId=LangId;
ctx.SaveChanges();
}
}
公共静态void addNewUser(int userId)
{
User newUser=新用户();
newUser.Id=userId;
newUser.LangId=0;
使用(MyEntities ctx=new MyEntities())
{
ctx.Users.Add(newUser);
ctx.SaveChanges();
}
}
}
然后在我的代码中,我可以这样称呼它:
bluer.changeurslandgid(1,1)

这是一种好方法(尤其是静态方法)吗?我觉得我可能会错过一些东西,但在这种情况下,由于静态方法,我不必关心BL对象的持久性

是否有一些关于这方面的有用教程,我发现这些文章非常复杂,新手不容易理解。

谢谢。

对于这种情况,我建议您使用
存储库模式
,该模式构成您业务服务的一个门面

此模式用于基于ORM的解决方案中


链接:

我会将您的数据访问代码注入业务逻辑层。这样,对业务逻辑进行单元测试就容易多了

看一下图案

您的数据访问代码应该返回对象,请查看

如果您有关于这些文章的具体问题,我相信用户可以提供帮助

一般来说,静态方法从来都不是一个好主意,因为它们会导致难以进行单元测试的僵化代码