Как определить лениво загруженные свойства во время выполнения таблицы linq? - PullRequest
0 голосов
/ 03 августа 2010

Я перебираю свойства различных сопоставленных таблиц в моем коде и должен знать, загружено ли каждое свойство с отложенной загрузкой.Я обнаружил, что переменная экземпляра, используемая для хранения и обозначенная атрибутом Storage в свойстве, будет иметь тип System.Data.Linq.Link.

. Есть ли способ использовать эти два факта во время выполнения длярешить эту проблему?

Код:

public void LazyLoad(Type tableType)
{
    foreach (var prop in tableType.GetGenericArguments()[0].GetProperties())
    {
        if (/* IS LAZY LOADED */)
        {
            //real work here...
            Console.WriteLine(prop.Name);
        }
    }
}

Отображения выглядят так:

public partial class Address
{
    private System.Data.Linq.Link<string> _City;

    [Column(Storage="_City", DbType="...")]
    public string City
    {
        get { /* ... */ }
        set { /* ... */ }
    }
}

1 Ответ

1 голос
/ 03 августа 2010

Вы почти у цели.Ложка, полная отражений, помогает лекарству опуститься; -)

private static bool IsLazyLoadedProperty(PropertyInfo property)
{
    var column = property.GetCustomAttributes(typeof(ColumnAttribute), true)[0] 
        as ColumnAttribute;

    var field = property.DeclaringType.GetField(column.Storage, 
        BindingFlags.Instance | BindingFlags.NonPublic);

    if (!field.FieldType.IsGenericType)
    {
        return false;
    }

    return field.FieldType.GetGenericTypeDefinition() == typeof(Link<>);
}
...