c# - 如何检查 EntityTypeConfiguration<T> 实例的成员配置?

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

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

最佳答案

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

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

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

((IObjectContextAdapter)myDbContext).ObjectContext.MetadataWorkspace

我还没有继续实现这个,但我会把它标记为答案,直到有人提交另一个答案(在我开始之前的一个例子,或者其他选项)。

关于c# - 如何检查 EntityTypeConfiguration<T> 实例的成员配置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18518835/

相关文章:

c# - ASP MVC4 - 传递列表以通过 View 模型查看

c# - 选择 QueryExpression CRM 2011 中的所有列

c# - C# 访问器应该使用私有(private)变量还是即时计算?

C# - 字符串比较是错误的,尽管我检查过

c# - 将方法添加到自动生成的类

c# - 使用传递给方法的 lambda 表达式会减慢 Entity Framework 查询的速度吗?

c# - Dot Net Entity Framework 数据库更新不会在 mysql 数据库中创建表

entity-framework - 如何在 EF Code First 中对表进行单一化?

asp.net-mvc-3 - MVC3 - 如何将新创建的子对象链接到其父对象?

ef-code-first - EF5代码中的多对多关系首先,如何指定表名?