MVVM使用Web API,视图模型和实体框架查看模型集合

时间:2015-02-04 09:23:03

标签: c# asp.net-mvc entity-framework mvvm asp.net-web-api

关于Web API中视图模型的集合助手类的问题<>查看模型<>实体框架<>数据库结构。

我正在尝试在一个项目上开始设计,该项目将使用“API”前端来获取数据,然后使用HTML / Javascript页面来获取和渲染。

在尝试创建一个MVVM方法时,我不确定我想要的是否是一个好的approch。

这是ViewModel的get方法。 HTML方面的用户一次只能编辑一个Object,因此该集合只提供对象的数组/列表,使Web API类“不那么混乱”。

使用Visual Studio MVC / Web API项目/ c#(Visual Studio 2013以及MVC 5组件)

所以使用椅子对象的例子

注意:在实际代码中不会执行“new MyEntity()。Chairs。”所有的时间,它都会被设置为类中的变量。只需简单的书面例子就可以说清楚。

Web API部分: 我们将复数api对象前点 Web API控制器= ChairsController 2获得

namespace FurnitureAPI.Controllers
{
[Authorize]
public class ChairsController : ApiController
{
    // GET api/chairs
    public IHttpActionResult Get()
    {
        var chairs = ViewModels.Chairs.Get();
        return Ok(chairs);
    }

    // GET api/chairs/5
    //public string Get(int id)
    public IHttpActionResult Get(int id)
    {
        var chair = ViewModels.Chairs.Get(id);
        return Ok(chair);
    }

公开... GET(){...} //所有主席   public ... GET(int id){} //单个椅子,其中id

数据库方面,我们有主席表。这对数据库来说是单一的。 数据库已经存在,因此使用实体框架和数据库优先建模,我们进入实体

 var furniture_db = new Models.FurnintureEntities();

Models.Chair

所以中间想要一个查看模型主席。

namespace FurnitureAPI.ViewModels {
public class Chair {
    public int ChairID { get; set; }
    public string Name { get; set; }

    public Chair() { }
    public Chair(int chairid, string name) {
        ChairID = chairid;
        Name = name;
    }
    public Chair(Models.Chair db_chair) {
        ChairID = db_chair.ChairID;
        Name = db_chair.Name;
    }
}

在我看来,Web API ChairsController我不想拥有任何实体框架代码。 但是我希望api能够调用一些东西来获得一个主席视图模型的列表/集合

所以我想,将主席添加为ViewModel命名空间中的一个类,它将是静态的。

所以web api变为

public IHttpActionResult Get()
{
    var chairs = ViewModels.Chairs.Get();
    return Ok(chairs);
}

然后View Model Collection Chairs看起来像

namespace FurnitureAPI.ViewModels {
public static class Chairs {
    public static List<Chair> Get() {
        List<Chair> chairs = (from s in new Models.FurnintureEntities().Chairs
                                                    select new ViewModel.Chair {
                                                        ChairID = s.ChairID,
                                                        Name = s.Name
                                                    }).ToList();

        return chairs;
    }

    public static Chairs Get(int id) {
        var chair = new FurnitureEntities().Chairs.SingleOrDefault(c => c.ChairID == id);
        return chair != null ? new ViewModel.Chair(chair) : null;
    }
}

所以问题是,这个Chairs集合包装好吗/理想/糟糕/跑到山丘/其他地方,还是有人可以指出不同的方法?

我不明白为什么在互联网上努力寻找参考,肯定希望它不是脾气暴躁的晚年。 我发现很多WPF MVVM实体框架数据库的第一个东西,但我只是想制作“简单”的Web API来公开数据库来制作HTML视图。

也许我不需要打扰View Model并简单地在Web API方法中序列化实体?

感谢。

1 个答案:

答案 0 :(得分:0)

不幸的是,我也一直在努力解决这个问题,看起来这个主题并没有得到应有的爱。

无论如何,在这些工具中,您可以计算: