在asp.net中使用具有MVC 3体系结构的Linq C#插入数据

在asp.net中使用具有MVC 3体系结构的Linq C#插入数据,asp.net,asp.net-mvc-3,linq,Asp.net,Asp.net Mvc 3,Linq,我正在使用控制器插入数据 注册控制器 [HttpPost] public ActionResult Index(SignUpModel sm) { using(DataClassesDataContext dc= new DataClassesDataContext()) { Dummytable dm= new Dummytable(); { dm.Name=sm.password; } //then conncetion string and submit } } 和重定向 我的问题是,

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

注册控制器

[HttpPost]
public ActionResult Index(SignUpModel sm)
{

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


我的问题是,在控制器模块中写入此代码是正确的,还是需要在模型模块中写入此代码,如果需要在模型模块中写入此代码,那么如何定义setter帮助我解决此问题。

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

public interface IRepository
{
    void Insert(SignUpModel model);
}
然后使用您正在使用的数据访问技术(例如EF)进行特定的实现:

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

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框架并连接依赖项


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

第一个问题是您的
DataAccessLayer
在哪里

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

控制器
仅具有for
UI
逻辑

您可以使用
接口
,以提高重用性和单元测试


这在重要数据存储/访问(如注册)中并不常见。考虑Web安全工具,不要直接使用这种类型的数据。或者将您的意思更改为使用公共数据。

为了使实现能够工作,jst在控制器的强制转换帮助下为接口提供类内存

[HttpPost]
public ActionResult Index(SignUpModel sm)
{
ISignUpModel ISign= (ISignUpModel)this.sm;
ISign.Insert(sm);
}
谢谢大家,因为你们,我学到了这一点:)


在SignUpModel.cs,在我编写getter setter的SignUpModel.cs中是否有正常的“名为ISignUp with Insert method的接口”实现?是否可以在该模块中包含更多类?您可以在单独的.cs文件中定义接口和实现。是否需要强制接口?插入问题:dc.Dummytables.InsertOnSubmit(dm);我是MVC新手,我只是想知道我应该把代码放在哪里?我用过DataClasses.dbml
[HttpPost]
public ActionResult Index(SignUpModel sm)
{
ISignUpModel ISign= (ISignUpModel)this.sm;
ISign.Insert(sm);
}