我在我的 asp.net 项目中使用 Breeze。
我有一个实体(传输),其中包含另一个实体(linkedTransports)。
我有一个页面,允许用户为我的 Transport 添加/删除一些linkedTransports。当用户单击特定linkedTransport 的删除按钮时,它被标记为已删除,但只有在调用时才会真正删除datacontext.saveChanges();
。用户仍然可以点击取消然后我打电话datacontext.cancelChanges()
。
每个linkedTransport 必须是唯一的。我的意思是我不能将元素 123 添加两次。
每次用户尝试添加linkedTransport 时,我都会遍历所有linkedTransport 并检查它是否不存在。对于大多数情况,它工作得很好。
我的问题:以下情况有问题:
- 删除元素 123
- (直到 saveChanges 才提交删除)
- 添加元素 123
因为元素被删除(实际上是 setDeleted 但未提交服务器端)我没有检测到他的存在客户端然后添加错误,因为密钥已经存在。
我希望你明白我的意思。
知道如何在允许用户添加之前遍历所有linkedTransports(甚至已删除)以检查它是否已经存在?
这是我的课程:
public class Transport
{
[Key]
public int Id { get; set; }
...
public virtual List<LinkedTransport> LinkedTransports { get; set; }
}
public class LinkedTransport
{
[Key, Column(Order = 0)]
public int TransportId { get; set; }
[Key, Column(Order = 1)]
public int TransportRelatedId { get; set; }
public virtual Transport Transport { get; set; }
public virtual Transport TransportRelated { get; set; }
}
到目前为止,这是我检查元素是否已经存在的方法:
// don't accept if selected element is already present
for (var i = transport().linkedTransports().length - 1; i >= 0 ; i--) {
if (transport().linkedTransports()[i].transportRelatedId() == transpRelatedId) {
alert('Already present!');
return false;
}
};
// if we go so far then we can create the linkedTransport safely
ctxTransport.createLinkedTransport(transpId, transpRelatedId, transpNumber);
谢谢。