Breeze Don';如果元素已经存在,则不允许用户添加元素(即使标记为setDeleted)

Breeze Don';如果元素已经存在,则不允许用户添加元素(即使标记为setDeleted),breeze,durandal,Breeze,Durandal,我在asp.net项目中使用Breeze 我有一个实体(传输),其中包含另一个实体(LinkedTransport) 我有一个页面,允许用户为我的传输添加/删除一些LinkedTransport。当用户单击特定linkedTransport的“删除”按钮时,它会被标记为已删除,但只有在调用datacontext.saveChanges()时,它才会真正被删除。用户仍然可以点击cancel,然后我调用datacontext.cancelChanges() 每个linkedTransport必须是唯

我在asp.net项目中使用Breeze

我有一个实体(传输),其中包含另一个实体(LinkedTransport)

我有一个页面,允许用户为我的传输添加/删除一些LinkedTransport。当用户单击特定linkedTransport的“删除”按钮时,它会被标记为已删除,但只有在调用
datacontext.saveChanges()时,它才会真正被删除。用户仍然可以点击cancel,然后我调用
datacontext.cancelChanges()

每个linkedTransport必须是唯一的。我的意思是我不能加两次元素123

每次用户尝试添加linkedTransport时,我都会遍历所有linkedTransport并检查它是否还不存在。在大多数情况下,它工作得相当好

我的问题:下面的案例有问题:

  • 删除元素123
  • (在保存更改之前,删除不会提交)
  • 添加元素123
因为元素被删除了(实际上是setDeleted,但不是committed服务器端),我没有检测到他的存在客户端,然后add出错,因为密钥已经存在

我希望你明白我的意思

在允许用户添加之前,您知道如何循环所有LinkedTransport(甚至已删除)以检查它是否已经存在吗

以下是我的课程:

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; }
}

谢谢。

我想我可以用删除的传输来补充搜索列表,例如

var transports = transport().linkedTransports(); for (var i = transports.length; i-- >= 0){ if (transports[i].RelatedTransportId() == transpRelatedId) { alert('Already present!'); return false; } } var deleted = manager.getEntities(transportType, breeze.EntityState.Deleted); for (i = deleted.length; i-- >= 0){ if (deleted[i].id() == transpRelatedId) { alert('Was deleted!'); return false; } } var transports=transport().linkedTransports(); 对于(变量i=传输长度;i-->=0){ if(transports[i].RelatedTransportId()==TransportRelatedId){ 警报(“已存在!”); 返回false; } } var deleted=manager.getEntities(transportType,breeze.EntityState.deleted); 对于(i=deleted.length;i-->=0){ if(已删除[i].id()==transpRelatedId){ 警报('已删除!'); 返回false; } }
正是我需要的。谢谢 var transports = transport().linkedTransports(); for (var i = transports.length; i-- >= 0){ if (transports[i].RelatedTransportId() == transpRelatedId) { alert('Already present!'); return false; } } var deleted = manager.getEntities(transportType, breeze.EntityState.Deleted); for (i = deleted.length; i-- >= 0){ if (deleted[i].id() == transpRelatedId) { alert('Was deleted!'); return false; } }