【问题标题】:How do I examine the member configurations of an EntityTypeConfiguration<T> instance?如何检查 EntityTypeConfiguration<T> 实例的成员配置?
【发布时间】:2013-08-29 18:48:23
【问题描述】:

我将 Entity Framework Code First 与从 EntityTypeConfiguration 继承的地图类一起使用。我这样做是为了封装我使用 Code First fluent 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;
}

【问题讨论】:

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


    【解决方案1】:

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

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

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

    ((IObjectContextAdapter)myDbContext).ObjectContext.MetadataWorkspace
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-23
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多