如何在运行时从Fluent API映射规范中获取MaxLength?

时间:2013-12-18 15:54:04

标签: c# reflection entity-framework-5 fluent-interface maxlength

我需要使用Fluent API和Entity Framework 5 Code First检索为字段指定的maxlength值。

我已经看过几个使用MetadataWorkspace的示例,但是当您使用Fluent API时它不起作用。 例如,我尝试了这段代码,但MaxLenght的值始终为null:

ObjectContext.MetadataWorkspace.GetItem<GlobalItem>(typeof(TEntity).FullName, DataSpace.OSpace).MetadataProperties[field].TypeUsage.Facets["MaxLength"].Value

在Fluent API配置文件中,我有以下代码用于必要的属性:

Property(t => t.Name).HasMaxLength(50);

我知道映射正在运行,因为如果我尝试在该字段中保存超过50个字符的对象,则会失败。

我只需要获得maxlenght值的指导,但要给出一些目标:

  1. 创建新的Foo对象
  2. 使用Fluent API获取为Bar属性定义的maxlength值。
  3. 将基于maxlength的某些规则应用于要分配给Bar的字符串。
  4. 保存。
  5. 提前致谢。

1 个答案:

答案 0 :(得分:0)

您应该使用存储模型。检查Enum DataSpace上的文档 使用EntityType项目。

  [TestMethod]
    public void EFToolsTest() {

        var context = new BosMasterDbContext("MYDBCONTEXT");
        ObjectContext objContext = ((IObjectContextAdapter)context).ObjectContext;
        MetadataWorkspace workspace = objContext.MetadataWorkspace;

        var xyz = workspace.GetItems<EntityType>(DataSpace.SSpace);
        foreach (var ET in xyz) {
            foreach (var sp in ET.Properties) {
                Debug.WriteLine(sp.Name + ":" + sp.MaxLength);

                }
            }
        }