我正在开发一个使用带有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);
}
答案 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