1

我需要使用Fluent API和Entity Framework 5 Code First检索为字段指定的maxlength值。如何从运行时的Fluent API映射规范中获取MaxLength?

我已经看到了一些使用MetadataWorkspace的例子,但在使用Fluent API时它不起作用。 举例来说,我想这个代码,但对于MaxLenght值总是空:

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

的流畅API配置文件,我有必要的属性以下代码中:

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

我知道映射正在工作,因为如果我尝试在该字段中保存超过50个字符的对象,它将失败。

我只需要得到maxlenght值,但给一些角度来看,目标是指导:

  1. 创建新的Foo对象
  2. 获得使用流利的API栏属性定义的最大长度值。
  3. 将基于maxlength的特定规则应用于要分配给Bar的字符串。
  4. 保存。

在此先感谢。

+0

你想让我们为你写吗? –

+0

这不会是必要的,我只需要指导我可以使用什么库来获取maxlength值,代码已经完成,除了该部分。我只是编辑了这个问题来说清楚。谢谢。 – Kakaroto

+0

'但它不起作用,当你使用Fluent API。什么不工作? –

回答

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); 

       } 
      } 
     } 
+0

我可能有不同的版本(使用EF 5.0),但我必须使用(sp.TypeUsage.Facets.Contains(“MaxLength”)?sp.TypeUsage.Facets [“MaxLength”]。Value:string.Empty)来获取MaxLength。编译器不会接受“sp.MaxLength”。 –

+0

这个答案对于实体框架将来放弃对象上下文是有问题的。 –

相关问题