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

這個答案對於實體框架將來放棄對象上下文是有問題的。 –

相關問題