Как я могу получить доступ к другим, чем «общие» атрибуты Entity-Property из EntityModel в T4? - PullRequest
1 голос
/ 08 июля 2011

Я использую вид следующего кода, чтобы получить все свойства объекта

IList<EdmProperty> list = entity.Properties.Where(p => p.TypeUsage.EdmType is PrimitiveType && p.DeclaringType == entity)

Затем я перебираю этот список, получаю доступ к каждому свойству и читаю свойства свойства (да, много свойств, надеюсь, никто не запутается).

Несмотря на то, что я могу легко получить доступ к атрибутам General, я не знаю, как получить доступ к другим свойствам Entity-Property, таким как Max Length & Fixed Length

Ответы [ 3 ]

1 голос
/ 08 июля 2011

Попробуйте следующий код:

var MaxLength = (property as EdmMember).TypeUsage.Facets.Where(f => f.Name == "MaxLength").SingleOrDefault();
int maxLength = -1;
if(MaxLength != null)
  maxLength = (int)MaxLength.Value;  

Вы можете использовать переменную maxLength в коде шаблона.Любой другой аспект может быть доступен аналогичным образом.

1 голос
/ 26 июля 2012
  protected void RecognizeByMetadata(IList<Facet> facets)
    {
        //Dictionary<string, string> attributes = new Dictionary<string, string>();
        //facets.AsParallel().ForAll(x => attributes.Add(x.Name, x.Value + ""));
        try{
        var t = facets.Where(x => x.Name == "MaxLength").Select(x => x.Value).FirstOrDefault();

        if (t != null)
        {

            string typ = t.GetType().FullName;

            this.isMax = (t.ToString() == "Max");

            if (!isMax)
                this.MaxLength = (int?)t;
        }
        else
        {
            isMax = false;
            MaxLength = null;
        }

        this.IsNullable = (bool?)facets.Where(x => x.Name == "Nullable").Select(x => x.Value).FirstOrDefault();
        this.Defaultvalue = facets.Where(x => x.Name == "DefaultValue").Select(x => x.Value).FirstOrDefault();
        this.IsUnicode = (bool?)facets.Where(x => x.Name == "Unicode").Select(x => x.Value).FirstOrDefault();
        this.IsFixedlength = (bool?)facets.Where(x => x.Name == "FixedLength").Select(x => x.Value).FirstOrDefault();
        //string precision    = facets.Where(x => x.Name == "Precision").Select(x => x.Value + "").FirstOrDefault();
        //string scale        = facets.Where(x => x.Name == "Scale").Select(x => x.Value + "").FirstOrDefault();
        isRecognized = true;
        recognizeUnique();
        } catch (Exception e)
        {
        string mewssage = e.Message;
        throw;
        }
    }
1 голос
/ 08 июля 2011

Эти свойства не являются частью PrimitiveType. Они находятся прямо в p.TypeUsage под Facets собственности.

...