代码之家  ›  专栏  ›  技术社区  ›  Jake Wharton

如何在运行时确定linq表上的延迟加载属性?

  •  0
  • Jake Wharton  · 技术社区  · 14 年前

    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 回复  |  直到 14 年前
        1
  •  1
  •   Steven    14 年前

    你就快到了。只要一勺满是倒影,就可以让药降下来;—)

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