MVC APi与实体框架,更新的最佳方式?

时间:2017-07-12 00:36:01

标签: asp.net-mvc entity-framework-6

我正在开发一个使用带有Entity Framework 6.1.3的MVC API的项目。我们需要实现Get,GET / ID,Insert,Update和Delete API。

对于Insert和Update,我们有一个与DB不同的参数类,我不确定什么是最佳解决方案。

对于更新(我有更多问题),我可以找到一条记录然后手动更新所有属性,这是我想要避免的。如果我使用来自实体的当前值,那么我将不得不在我要编写的所有api中设置ExtraValues属性,这种看起来很奇怪。

注意:我希望有一个子类,因为大多数实体使用相同的字段(Created / Updated),所以不要在所有类中使用它们而是将它们作为继承。

对于这个问题必须有一个更好的解决方案,有人可以帮助提出想法或最佳方法。

    public class DBClassA : ExtraValues
    {
        public int ID { get; set; }
        public string Name { get; set; }
    }

    public class DBClassB : ExtraValues
    {
        public int ID { get; set; }
        public string Name { get; set; }
    }

    //This will be use in all the classes
    public class ExtraValues
    {
        public string SameValueInOtherClasses { get; set; }
        public string SameValueInOtherClasses2 { get; set; }
        public string SameValueInOtherClasses3 { get; set; }
    }

    [HttpGet]
    public List<DBClassA> Get()
    {
        return new List<DBClassA>();
    }

    [HttpGet]
    public DBClassA Get(int ID)
    {
        return new DBClassA();
    }

    [HttpPost]
    public HttpResponseMessage Insert(DBClassA obj)
    {
        using (var context = new DBEntities())
        {
            context.Entity.Attach(DBClassA);
            context.SaveChanges();
        }
        return Request.CreateResponse(HttpStatusCode.OK);
    }

    [HttpPut]
    public HttpResponseMessage Update(int ID, DBClassA obj)
    {
        using (var context = new DBEntities())
        {
            var entity = context.Entity.Find(ID);
            //I will have to put the ExtraValues here
            obj.ExtraValues = "";
            _context.Entry(entity).CurrentValues.SetValues(obj);
            context.SaveChanges();
        }

        return Request.CreateResponse(HttpStatusCode.OK);
    }

1 个答案:

答案 0 :(得分:0)

using (var db = new DBEntities())
{
    db.Entry(obj).State = EntityState.Modified;
    db.SaveChanges();
}

更多信息:http://www.entityframeworktutorial.net/EntityFramework4.3/update-entity-using-dbcontext.aspx