这是我使用EF存储库的breezeController:
[BreezeController]
public class BreezeController : ApiController
{
private readonly MyRepository _repository;
public BreezeController()
{
_repository = new MyRepository(User);
}
[HttpPost]
[ValidateHttpAntiForgeryToken]
public SaveResult SaveChanges(JObject saveBundle)
{
return _repository.SaveChanges(saveBundle);
}
[HttpGet]
public IQueryable<Compound> Compounds(int id)
{
var compounds = new List<Compound>();
compounds.add(new Compound() { Name = "cmp1" });
compounds.add(new Compound() { Name = "cmp2" });
compounds.add(new Compound() { Name = "cmp3" });
// Save compounds to database
return compounds.AsQueryable();
}
}
我希望在返回之前将此处创建的化合物保存到数据库中。我应该拨打SaveChanges吗?怎么样?
更新: 我试图将对象带到客户端并保存。但是,我似乎无法直接将这些对象用作:
cs.compound = compound;
manager.saveChanges();
因为我收到此错误&#34;存储更新,插入或删除语句影响了意外的行数(0)。自实体加载后,实体可能已被修改或删除。刷新ObjectStateManager条目&#34;。我怎样才能解决这个错误?我相信我错过了一些调整。
相反,我必须像往常一样创建实体,并逐个分配属性,如
cs.compound = manager.createEntity("Compound");
cs.compound.name = compound.name;
...
manager.saveChanges();
这非常麻烦,因为我有很多属性和嵌套对象。
那么,我如何使用服务器上创建的对象直接保存?
答案 0 :(得分:0)
我不知道你是如何在存储库中声明dbContext的。 让我们说你以这种方式声明它:
public MyDBContext { get { return _contextProvider.Context; } }
然后你可以添加_repository.MyDBContext.SaveChanges();
就在行前
return compounds.AsQueryable();