首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >遵循NerdDinner教程,不允许重复

遵循NerdDinner教程,不允许重复
EN

Stack Overflow用户
提问于 2010-03-10 04:07:11
回答 2查看 225关注 0票数 0

我的sql数据库不允许添加具有相同编号的2条记录。如果我尝试使用以前使用的编号创建记录,或者编辑记录以使用以前使用的编号,则系统不允许这样做,并返回到带有星号的编辑/创建页面,其中包含一个带有分包编号字段的星号。我想为此添加一个规则违规,以便可以显示适当的消息。我尝试添加以下内容:

代码语言:javascript
复制
 if (db.subcontracts.Count(s => s.subcontract_no == subcontract_no) > 0)
      yield return new RuleViolation("Subcontract number already exists", "subcontract_no");

在写这篇文章的时候,我只想到了Create方法。这里的问题是,每当我编辑一条记录时,它都会发现一个冲突,即使subcontract_no没有改变。因此,我想我需要它在创建记录和编辑subcontract_no时查找违规。但是,它不能“找到自己”并创建一个违反规则的规则。我该怎么做呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-03-10 04:24:05

尝试:

代码语言:javascript
复制
db.subcontracts.Count(s => (s.subcontract_no == subcontract_no) 
    && (s.id != actually_edited_or_created_contract.id)).Count

它将处理新的或现有的实体,即使在entity.id ==为空时也是如此。

票数 1
EN

Stack Overflow用户

发布于 2010-03-10 04:19:23

首先,在编辑/更新页面上,如果该值不能更改,则不要将其显示为可编辑的值。您可能希望在操作中返回一个ViewModel,从DB中检索相应的模型,并使用带有排除不可变字段的限制的TryUpdateModel。其次,在验证代码中,当更改类型为Update (而不是Insert)时,忽略检查重复的分包合同编号。在此基础上增加一些代码,这些代码与subcontract属性的属性更改处理程序绑定在一起,如果subcontract已经具有(非初始)值,并且您试图更改它,则该处理程序将抛出异常。这将防止除非在插入时才设置该值,并允许您跳过更新时的验证检查。

您还可以将其与强制列的唯一性的DB约束结合使用--非null列上的唯一索引将起作用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2412179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档