我有一个变更集来创建索引。
<changeSet author="hilland" id="x-NC-U-y" runOnChange="true">
<createIndex indexName="NC-U-y" tableName="x" unique="true">
<column name="y"/>
</createIndex>
<rollback>
<dropIndex .../>
</rollback>
<modifySql>
<append value=" INCLUDE ( [a],[b]) WITH (DATA_COMPRESSION=page)"/>
</modifySql>
</changeSet>
Run Code Online (Sandbox Code Playgroud)
问题是索引的旧版本可能存在(它会在某些目标上(开发服务器,具有此索引的旧版本;不包括),不会在其他目标上(例如,新部署到空数据库)。
有没有更好的方法来解决这个问题,以便脚本变得通用,而不是包含一个前缀
<sql>IF select {sys.indexes.stuff} is not null {drop the index}</sql>?
Run Code Online (Sandbox Code Playgroud)
理想情况下,删除现有索引是一个前提条件,以便可以重新创建它,但我认为这是不可能的。
处理这种情况的最佳方法是什么?
我想到的另一种解决方案是有一个单独的变更“如果索引 v1 存在,则删除它”然后有一个单独的 v2 变更集,但这会使回滚变得困难。
我意识到变更集的变更条件运行使回滚变得困难,但在这种情况下我唯一关心的回滚是往返于空数据库,尽管也欢迎使用易于回滚到先前版本的模式。
问题: 我试图手动验证一些c#对象,而Validator忽略了与字符串长度相关的验证.
测试用例: 扩展这个使用[Required]属性的例子,我也想验证字符串不是太长,如下所示.
public class Recipe
{
//[Required]
public string Name { get; set; }
[MaxLength(1)] public string difficulty = "a_string_that_is_too_long";
}
public static void Main(string[] args)
{
var recipe = new Recipe();
var context = new ValidationContext(recipe, serviceProvider: null, items: null);
var results = new List<ValidationResult>();
var isValid = Validator.TryValidateObject(recipe, context, results);
if (!isValid)
{
foreach (var validationResult in results)
{
Console.WriteLine(validationResult.ErrorMessage);
}
} else {
Console.WriteLine("is valid");
}
}
Run Code Online (Sandbox Code Playgroud)
预期结果:错误:"难度太长."
实际结果: '有效' …