根据Entity Framework 6的自定义约定规范,最后一个约定胜出。我看到了相反的行为。如果我使用这些约定:
modelBuilder.Properties<string>()
.Where(x => x.GetCustomAttribute<UseMaxLengthAttribute>() != null)
.Configure(c => c.HasMaxLength(int.MaxValue));
// by default, allows nvarchar columns to be indexed (900 byte max)
modelBuilder.Properties<string>().Configure(c => c.HasMaxLength(450));
然后在我的迁移中,除非该属性具有属性,否则所有string
列都是。nvarchar(450)
[UseMaxLength]
如果我切换顺序(在基于属性的约定之前放置默认值HasMaxLength(450)
),则所有字符串列的长度均为 450,忽略自定义属性。这似乎与规范规定的相反(最后应用的约定获胜)。
这是一个错误,还是我误解了规范?