我在我的asp.net项目中使用Breeze。
我有一个实体(传输),其中包含另一个实体(linkedTransports)。
我有一个页面,我允许用户为我的传输添加/删除一些linkedTransports。当用户单击特定linkedTransport的删除按钮时,它被标记为已删除,但只有在调用datacontext.saveChanges();
时才会将其删除。用户仍然可以点击取消,然后拨打datacontext.cancelChanges()
。
每个linkedTransport必须是唯一的。我的意思是我不能添加两次元素123。
每次用户尝试添加linkedTransport时,我都会遍历所有linkedTransports并检查它是否已经存在。对于大多数情况,它工作得很好。
我的问题:以下情况存在问题:
因为该元素被删除(实际上是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);
感谢。
答案 0 :(得分:0)
我认为我可以使用已删除的传输补充搜索列表,例如,
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; } }