modelstate – asp.net mvc没有实体框架

前端之家收集整理的这篇文章主要介绍了modelstate – asp.net mvc没有实体框架前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在学习asp.net mvc,并通过一个伟大的教程来展示它.本教程还使用了实体框架.

我们有自己的数据访问类,我必须使用.
我有点困惑,我需要做什么来弥合我们的类和MVC框架之间的差距.
例如,在教程中,MovieController.cs文件中有一个Edit方法,如下所示:

[HttpPost]
        public ActionResult Edit(Movie movie)
        {
            if (ModelState.IsValid)
            {
                db.Entry(movie).State = EntityState.Modified;
                db.SaveChanges();
                return RedirectToAction("Index");
            }
            return View(movie);
        }

如果我不使用实体框架,它会是什么样子?我仍然需要使用ModelState.IsValid并保存状态,就像完成一样

db.Entry(movie).State = EntityState.Modified;

请指教.使用asp.net mvc而不使用Entity框架的一个清晰的例子将是巨大的.

我需要知道的是,国家在这里扮演什么角色,以及是否强制使用,还是只是实体框架运作的一部分.

我会重写:

[HttpPost]
public ActionResult Edit(Movie movie)
{
    myDBObject.SaveChanges();
    return RedirectToAction("Index");

}

其中myDBObject是我的自定义数据库访问对象.

解决方法

您在那里看到控制器直接使用一些数据访问框架(如实体框架)的示例是不好的例子.整个互联网被这样的东西污染了.我几乎看不到眼睛受伤了.我认为那些不好的做法.数据访问应在存储库中分离和抽象.所以例如:
public interface IMoviesRepository
{
    Movie Get(int id);
    void Save(Movie movie);
}

那么您可以使用纯ADO.NET,EF,NHibernate,远程Web服务调用,某些自定义ORM或真正的任何方式来实现此接口:

public class MyCustomFrameworkMoviesRepository: IMoviesRepository
{
    ...
}

并且控制器将把这个存储库接口作为构造函数参数:

public class MoviesController: Controller
{
    private readonly IMoviesRepository _repository;
    public MoviesController(IMoviesRepository repository)
    {
        _repository = repository;
    }

    public ActionResult Index(int id)
    {
        var movie = _repository.Get(id);
        return View(movie);
    }

    [HttpPost]
    public ActionResult Index(Movie movie)
    {
        if (!ModelState.IsValid)
        {
            return View(movie);
        }

        _repository.Save(movie);
        return RedirectToAction("Success");
    }
}

最后一部分是配置依赖注入框架,将存储库的正确实现传递到控制器中.现在,您可以看到数据获取的方式与控制器逻辑完全解耦.这是应该的方式.始终尽量避免应用程序不同层之间的强耦合.

并回答您关于国家财产的问题:这是EF完全具体的内容,在控制器中看到像这样的事情真是可惜.

为了进一步提高这一点,您将引入视图模型.视图模型是专门设计用于满足给定视图要求的类.所以例如Movie是域模型.域模型不应该直接传递给视图.控制器操作不应该将域模型作为动作参数.您应该定义仅包含给定视图所需的视图模型,然@R_403_424@视图模型和域模型之间的映射.框架如AutoMapper使这非常简单.

原文链接:https://www.f2er.com/aspnet/250049.html

猜你在找的asp.Net相关文章