根据实体框架6的the custom convention spec,最后一项约定获胜。我看到了相反的行为。如果我使用这些约定:
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,忽略自定义属性。这似乎与规范所述(最后一次应用的约定获胜)相反。
这是一个错误,还是我误解了规范?
答案 0 :(得分:0)
这是一个仍然存在于rc1中的错误,但在夜间构建中已修复,并将在发布中修复。有关每晚构建的更多信息,请查看此页面:https://entityframework.codeplex.com/wikipage?title=Nightly%20Builds您还可以在https://entityframework.codeplex.com/
读取和归档Entity Framework的错误