我正在使用Entity Framework Code First和从EntityTypeConfiguration继承的地图类。我这样做是为了封装我使用Code First流畅的API来配置实体。
我希望能够检查这些类中的配置设置,以便我可以在集成测试中应用其中的一些。我正在使用AutoFixture快速创建实体,最终我想找到一种方法来进行一些使用我的EntityTypeConfiguration类中的配置的自定义。
但首先,我需要弄清楚如何将它们拉出来......
这是一个用例示例:
public class Widget { public string Name { get; set; } }
public class WidgetMap : EntityTypeConfiguration<Widget> {
this.Property(w => w.Name).HasMaxLength(10);
}
我该怎么做这样的伪代码:
public Widget GetWidgetHonoringStringLengthConstraints(WidgetMap map) {
var w = new Widget();
int maxLength = map.GetProperty(p => p.Name).GetMaxLength(); //MAGIC
string name = new Guid().SubString(0, maxLength);
w.Name = name;
return w;
}
答案 0 :(得分:1)
我在Entity Framework Codeplex Discussions收到了Arthur Vickers的回复。
基本上,他告诉我,我正在咆哮错误的树,因为,根据设计,他们不希望从正常的公共表面检查配置类 - 这个想法是它会污染API并试图找到像字符串的最大长度这样的东西经常告诉你故事,但不是整个故事(最终的最大长度限制可能来自几个约定,包括默认设置),这可能并不总是给出你得到了你真正追求的答案。
他建议通过MetadataWorkspace建立后从模型中获取元数据,可以这样访问:
((IObjectContextAdapter)myDbContext).ObjectContext.MetadataWorkspace
我还没有实现这个目标,但我会将此标记为答案,直到有人提交另一个答案(在我解决这个问题之前的一个例子或其他选项)。