3

我将 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;
}
4

1 回答 1

1

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

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

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

((IObjectContextAdapter)myDbContext).ObjectContext.MetadataWorkspace

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

于 2014-10-31T17:12:29.417 回答