Angular / Breeze:如何将BreezeController中的数据直接保存到数据库中

时间:2014-03-16 03:26:58

标签: entity-framework breeze

这是我使用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();

这非常麻烦,因为我有很多属性和嵌套对象。

那么,我如何使用服务器上创建的对象直接保存?

1 个答案:

答案 0 :(得分:0)

我不知道你是如何在存储库中声明dbContext的。 让我们说你以这种方式声明它:

public MyDBContext { get { return _contextProvider.Context; } }

然后你可以添加_repository.MyDBContext.SaveChanges(); 就在行前

return compounds.AsQueryable();