实体框架自定义约定顺序

时间:2013-09-17 14:45:53

标签: entity-framework entity-framework-6

根据实体框架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,忽略自定义属性。这似乎与规范所述(最后一次应用的约定获胜)相反。

这是一个错误,还是我误解了规范?

1 个答案:

答案 0 :(得分:0)

这是一个仍然存在于rc1中的错误,但在夜间构建中已修复,并将在发布中修复。有关每晚构建的更多信息,请查看此页面:https://entityframework.codeplex.com/wikipage?title=Nightly%20Builds您还可以在https://entityframework.codeplex.com/

读取和归档Entity Framework的错误