3

我想寫一個方法來獲取T4模板文件中屬性的可空狀態。確定模型的屬性是不可空或是必需的(在MVCScaffolding T4模板文件中)

我已經寫在我的TT文件,但在T4文件是不同

bool IsRequired(object property) { 
    bool result=false; 

    ? ? ? ? ? ? ? ? ? ? ? ? 

    return result; 
} 

List<ModelProperty> GetEligibleProperties(EnvDTE.CodeType typeInfo, bool includeUnbindableProperties) { 
    List<ModelProperty> results = new List<ModelProperty>(); 
    if (typeInfo != null) { 
     foreach (var prop in typeInfo.VisibleMembers().OfType<EnvDTE.CodeProperty>()) { 
      if (prop.IsReadable() && !prop.HasIndexParameters() && (includeUnbindableProperties || IsBindableType(prop.Type))) { 
       results.Add(new ModelProperty { 
        Name = prop.Name, 
        ValueExpression = "Model." + prop.Name, 
        Type = prop.Type, 
        IsPrimaryKey = Model.PrimaryKeyName == prop.Name, 
        IsForeignKey = ParentRelations.Any(x => x.RelationProperty == prop), 
        IsReadOnly = !prop.IsWriteable(), 

        // I Added this >> 
        IsRequired = IsRequired(prop) 
       }); 
      } 
     } 
    } 

怎麼辦呢???

回答

0

從T4模板中調用沒有什麼特別的,是嗎?看到這question

我個人喜歡麥克瓊斯的答案,轉載在這裏爲了方便。

public static bool IsObjectNullable<T>(T obj) 
{ 
    // If the parameter-Type is a reference type, or if the parameter is null, then the object is  always nullable 
    if (!typeof(T).IsValueType || obj == null) 
    return true; 

    // Since the object passed is a ValueType, and it is not null, it cannot be a nullable object 
    return false; 
} 

public static bool IsObjectNullable<T>(T? obj) where T : struct 
{ 
    // Always return true, since the object-type passed is guaranteed by the compiler to always be nullable 
    return true; 
} 
+0

這不會MvcScaffolding工作,因爲你沒有任何對象,只是屬性元數據。 由於您將System.Int32作爲類型名稱用於不可爲空和可空的整數,因此您也不能使用類型名稱。 – 2017-11-02 15:46:54

2

一年後,用同樣的問題解決問題,我發現了你的問題。我不認爲這可能以簡單的方式進行,因爲您必須將CodeTypeRef傳輸到Systemtype。這是一個很好的黑客,與模型和mvcscaffolding正常工作:

bool IsNullable(EnvDTE.CodeTypeRef propType) { 
    return propType.AsFullName.Contains(".Nullable<"); 
} 

你應該調用這個函數以這種方式:

   // I Added this >> 
       // IsRequired = IsRequired(prop) 
       IsRequired = IsNullable(prop.Type); 
      }); 
+1

不應該是IsRequired =!IsNullable(prop.Type) – 2015-02-28 23:35:34

相關問題