我应该如何使用Ember JS和asp.net MVC持久化到SQL Server DB



我在网上找到了一个例子(http://www.codeproject.com/Articles/511031/A-sample-real-time-web-application-using-Ember-js)开始学习Ember JS,这很酷,但我注意到它将数据保存到Ember.em文件中,该文件不像SQL Server或MySQL那样是DB。

我应该以何种方式将数据持久化到数据库中,比如说SQL Server。以下是当用户点击按钮从表中添加、更新、删除项目时调用的示例中的控制器代码:

namespace Ember.n.SignalR.Controllers
{
    using System;
    using System.Linq;
    using System.Web.Mvc;
    using Ember.n.SignalR.DS;
    using Ember.n.SignalR.DTOs;
    using Ember.n.SignalR.Validators;
    using FluentValidation.Results;
    using Newtonsoft.Json;
    using Newtonsoft.Json.Serialization;
    using Ember.n.SignalR.Hubs;
    public class CustomerController : Controller
    {
        //
        // GET: /Customer/
        JsonSerializerSettings _settings = new JsonSerializerSettings {
            ContractResolver = new CamelCasePropertyNamesContractResolver(),
            NullValueHandling = NullValueHandling.Ignore
        };
        public ActionResult Index()
        {
            return View();
        }
        [AcceptVerbs(HttpVerbs.Post)]
        public string Read(Guid? id)
        {
            Result r = new Result { ErrorCode = 0, ErrorMessage = String.Empty };
            if (id == Guid.Empty || id == null)
            {
                r.Data = CrudDS<Customer>.Items.AsEnumerable<Customer>();
            }
            else
            {
                r.Data = CrudDS<Customer>.Items.Find(c => c.Id == id);
            }
            return JsonConvert.SerializeObject(r, _settings);
        }
        [AcceptVerbs(HttpVerbs.Delete)]
        public string Delete(Guid id)
        {
            Result r = new Result { ErrorCode = 0, ErrorMessage = "Delete customer successful." };
            var customer = CrudDS<Customer>.Items.First(c => c.Id == id);
            bool ok = (customer == null) ? false : CrudDS<Customer>.Items.Remove(customer);
            CrudDS<Customer>.Serialize(DateTime.Now);
            if (!ok)
            {
                r.ErrorCode = -1;
                r.ErrorMessage = "Could not find customer with id=" + id;
            }
            r.Data = customer;
            // Broadcast to all clients
            CustomerHub.Instance.Clients.All.remove(JsonConvert.SerializeObject(customer, _settings));
            return JsonConvert.SerializeObject(r, _settings);
        }
        [AcceptVerbs(HttpVerbs.Put)]
        public string Update(Customer customer)
        {
            Result r = new Result { ErrorCode = 0, ErrorMessage = "Update customer successful." };
            Customer item = CrudDS<Customer>.Items.Find(c => c.Id == customer.Id);
            if (customer == null)
            {
                r.ErrorCode = -1;
                r.ErrorMessage = "Could not find customer with id=" + customer.Id + ".";
            }
            else
            {
                CustomerValidator validator = new CustomerValidator();
                ValidationResult results = validator.Validate(customer);
                if (!results.IsValid)
                {
                    r.ErrorCode = -1;
                    r.ErrorMessage = results.Errors.First().ErrorMessage;
                    return JsonConvert.SerializeObject(r, _settings);
                }
                item.FirstName = customer.FirstName;
                item.LastName = customer.LastName;
                item.Email = customer.Email;
                item.Phone = customer.Phone;
                CrudDS<Customer>.Serialize(DateTime.Now);
            }
            r.Data = customer;
            // Broadcast to all clients
            CustomerHub.Instance.Clients.All.update(JsonConvert.SerializeObject(customer, _settings));
            return JsonConvert.SerializeObject(r, _settings);
        }
        [AcceptVerbs(HttpVerbs.Post)]
        public string Create(Customer customer)
        {
            Result r = new Result { ErrorCode = 0, ErrorMessage = "Create customer successful." };
            CustomerValidator validator = new CustomerValidator();
            ValidationResult results = validator.Validate(customer);
            if (!results.IsValid)
            {
                r.ErrorCode = -1;
                r.ErrorMessage = results.Errors.First().ErrorMessage;
                return JsonConvert.SerializeObject(r, _settings);
            }
            customer.Id = Guid.NewGuid();
            CrudDS<Customer>.Items.Add(customer);
            CrudDS<Customer>.Serialize(DateTime.Now);
            r.Data = customer; // Return current customer
            // Broadcast to all clients
            CustomerHub.Instance.Clients.All.add(JsonConvert.SerializeObject(customer, _settings));
            return JsonConvert.SerializeObject(r, _settings);
        }
    }
}

我应该只向这些函数添加代码以将数据持久化到SQL Server数据库中吗?如果是这样的话,我是不是先保存到SQL Server数据库,然后如果它成功地更新了.em文件(这就是它目前正在做的)?还是先更新.em文件,然后尝试持久保存到SQL Server数据库,如果失败,则撤消对.em的更新?

我似乎在网上找不到任何保存到.em文件以及持久保存到外部数据库(如SQL Server或MySQL)的示例。

谢谢!

看起来.em文件是用于演示的。

您应该能够更改CrudDS<>方法来持久化数据,并且前端的行为应该是相同的。

以下是WebAPI2模板创建的默认操作的Post示例:

[ResponseType(typeof(Customer))]
public async Task<IHttpActionResult> PostCustomer(Customer customer)
{
    if (!ModelState.IsValid)
    {
        return BadRequest(ModelState);
    }
    db.Context.Add(customer);
    await db.SaveChangesAsync();
    return CreatedAtRoute("DefaultApi", new { id = customer.Id }, customer);
}

您可以从示例中看到!ModelState.IsValid属性与!results.IsValid检查几乎相同。

EntityFramework基本上完成了所有工作,创建对象,并使用db.SaveChangesAsync()持久化到存储。

最新更新