如何检查EntityTypeConfiguration <t>实例的成员配置?</t>

时间:2013-08-29 18:48:23

标签: c# entity-framework ef-code-first

我正在使用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;
}

1 个答案:

答案 0 :(得分:1)

我在Entity Framework Codeplex Discussions收到了Arthur Vickers的回复。

基本上,他告诉我,我正在咆哮错误的树,因为,根据设计,他们不希望从正常的公共表面检查配置类 - 这个想法是它会污染API并试图找到像字符串的最大长度这样的东西经常告诉你故事,但不是整个故事(最终的最大长度限制可能来自几个约定,包括默认设置),这可能并不总是给出你得到了你真正追求的答案。

他建议通过MetadataWorkspace建立后从模型中获取元数据,可以这样访问:

((IObjectContextAdapter)myDbContext).ObjectContext.MetadataWorkspace

我还没有实现这个目标,但我会将此标记为答案,直到有人提交另一个答案(在我解决这个问题之前的一个例子或其他选项)。