Asp.net 如何在服务器中应用客户端中所做的更改,如删除或修改实体
我不知道如何从EF中的相关表中删除元素 测试Json数据:Asp.net 如何在服务器中应用客户端中所做的更改,如删除或修改实体,asp.net,json,entity-framework,knockout.js,Asp.net,Json,Entity Framework,Knockout.js,我不知道如何从EF中的相关表中删除元素 测试Json数据: { "$id": "1", "Number": "000100029304", "Title": "Test Title", "Status": "Ready", "StatusDate": null, "Author": null, "UpdatedDate": "2012-12-12T12:12:12", "Comments": "test comment",
{
"$id": "1",
"Number": "000100029304",
"Title": "Test Title",
"Status": "Ready",
"StatusDate": null,
"Author": null,
"UpdatedDate": "2012-12-12T12:12:12",
"Comments": "test comment",
"Links": [
{
"$id": "4",
"DocumentId": 1234,
"Name": "Some file1.xls",
"Path": "\\\\mycomp\\folder\\Some file1.xls",
"Type": 0,
"Document": {
"$ref": "1"
},
"ID": 200
},
{
"$id": "5",
"DocumentId": 1234,
"Name": "Some file2.xls",
"Path": "\\\\mycomp\\folder\\Some file2.xls",
"Type": 0,
"Document": {
"$ref": "1"
},
"ID": 201
},
],
"ID": 1234
}
例如,用户从服务器获取一个模型
,并通过使用knockout js对其实体进行一些更改(如更新、添加或删除链接),然后将更改发送回服务器
在服务器端,接收到的数据被反序列化为模型
,并尝试应用更改
我知道如何插入新链接:
if (mylink.ID == 0) {context.Entry(mylink).State = EntityState.Added;}
else {context.Entry(mylink).State = EntityState.Modified;}
但是我找不到方法来删除客户端中删除的链接。我该怎么做?您使用了正确的技术:附加到
DbContext
并更改实体状态
您唯一的问题是没有跟踪已删除的实体并将其发送回服务器。有多个选项可用于删除(或更新)服务器中已更改的实体:
状态:ko.observable()
,可以添加,未更改,修改,或删除。删除实体时,不要将其从数组中删除,而是将其标记为已删除
。通过knockout可以很容易地隐藏使用此属性的实体,例如使用data bind=“visible:state()!=“deleted”
(如果使用computed来执行此检查,效果会更好),或者使用computed或类似的方法来过滤数组
DbContext
中的实体相似,则可以使用功能极其强大的工具,自动跟踪客户端中的更改,并将其发送回服务器。事实上,您可以将其几乎用作客户端EF,并且与knockout配合得非常好模型作为从服务器发送数据和向服务器发送数据的方式。您必须使用不同的方式。例如,在第一个解决方案中,您还需要在服务器大小上添加state
属性,以反序列化并使用它。您可以使用ole新类,或者简单地将属性添加到实体中,但使用EF属性忽略它,因为您不想将其保存在DB中。在上一个解决方案中,一切都发生在幕后,因此不需要手动操作