1

我正在使用控制器插入数据,

注册控制器.cs

[HttpPost]
public ActionResult Index(SignUpModel sm)
{

using(DataClassesDataContext dc= new DataClassesDataContext())
{
Dummytable dm= new Dummytable();
{
dm.Name=sm.password;
}
//then conncetion string and submit
}
}

和重定向

我的问题是,在控制器模块中编写此代码是否正确,或者我是否需要在模型模块中编写它,如果我需要在模型模块中编写它,那么如何定义设置器帮助我

4

4 回答 4

3

更好的做法是在数据访问层中移动所有数据访问代码。因此,只需将此代码放在一个单独的类中,您就可以从控制器中引用和调用。例如,您可以定义一个接口来定义不同的操作:

public interface IRepository
{
    void Insert(SignUpModel model);
}

然后有一个与您正在使用的数据访问技术一起使用的特定实现(例如 EF):

public class RepositoryEF : IRepository
{
    public void Insert(SignUpModel model)
    {
        using(DataClassesDataContext dc= new DataClassesDataContext())
        {
            Dummytable dm = new Dummytable();
            dm.Name = sm.password;
        }
    }
}

下一步是让您的控制器将此存储库作为构造函数依赖项:

public class SomeController : Controller
{
    private readonly IRepository repo;
    public SomeController(IRepository repo)
    {
        this.repo = repo;
    }

    [HttpPost]
    public ActionResult Index(SignUpModel sm)
    {
        this.repo.Insert(sm);

        ...
    }
}

现在剩下的就是拿起一些 DI 框架并连接依赖项。

这样,您的控制器逻辑和数据访问层之间就有了清晰的分离。这将允许您单独对应用程序的各个层进行单元测试。

于 2013-08-21T16:01:33.350 回答
0

第一个问题是你在哪里 DataAccessLayer

所以更好的做法是在另一个类中编写代码来读取和写入数据库值。

controller用于UI逻辑

并且您可以Interface用于增加可重用性的原因和单元测试。

在此处输入图像描述

于 2013-08-21T16:14:55.410 回答
0

为了实现工作,我只需要在控制器的强制转换的帮助下给接口类的内存

[HttpPost]
public ActionResult Index(SignUpModel sm)
{
ISignUpModel ISign= (ISignUpModel)this.sm;
ISign.Insert(sm);
}

谢谢大家,因为你们,我学到了这个:)

在 SignUpModel.cs 中,是正常的“接口命名为 ISignUp 和插入方法”实现

于 2013-08-21T17:49:58.447 回答
0

这在注册等重要数据存储/访问中并不常见。考虑使用网络安全工具,不要直接使用此类数据。或者改变你的意思来使用通用数据。

于 2013-08-21T16:21:42.190 回答