这个问题看起来也像"为什么服务器中对象的初始化代码不起作用?"。
例如,
public class Order
{
public int Id { get; set; }
public int Quantity { get; set; }
public Order()
{
Quantity = 10;
}
}
从调试器中,我可以看到调用了构造函数并设置了Quantity,但是它没有生效。创建实体后,我必须在客户端设置Quantity以使其工作。
有没有办法让服务器上的初始化工作?顺便说一句,我的项目是Angular / Breeze / EF。
更新:当我进一步挖掘时,我相信,这是一般的问题"在Breeze中,必须将服务器端更改添加到所谓的entityInfo.OriginalValueMap中,否则,不会保存其更改。如果是真的,如何解决这个限制,因为我有很多默认值我想在服务器上设置?
这就是我创建实体的方式:
var manager = new breeze.EntityManager("breeze/breeze");
manager.enableSaveQueuing(true);
function _createEntity(entityName) {
return manager.createEntity(entityName);
}
答案 0 :(得分:2)
在模型构造函数中设置服务器上的任何初始化代码都不会起作用,因为JavaScript客户端对服务器上的C#构造函数代码一无所知。
只有在构建Model-First元数据时才会遵守DefaultValueAttribute。遗憾的是,在构建Code-First模型元数据时,EF忽略了它。
我建议您通过创建"创建端点"来查看Breeze - Create Entity on Server side其他用户如何解决类似情况在服务器上基本上返回一个默认值设置的新实体。
答案 1 :(得分:0)
您不必创建构造函数来设置默认值。 只需将默认值数据注释添加到您希望设置其默认值的任何属性:
[DefaultValue(10)]
public int Quantity { get; set; }
另外,请考虑在客户端创建实体时不要初始化数量。