LINQ to SQL中如何获得所有实体外键的字段(In Linq to Sql How to ge

2019-09-19 07:30发布

我希望能在这个实体表中的所有外键列。 例如:

class User
{
    Id {get;set;}
    Name {get;set;}
    ColumnWithForeignKey1Id{get;set;}
    ColumnWithForeignKey2Id{get;set;}        
    ColumnWithForeignKey3Id{get;set;}
}

结果应该是这样的:

  • ColumnWithForeignKey1Id
  • ColumnWithForeignKey2Id
  • ColumnWithForeignKey3Id

Answer 1:

打开你的dbml文件的XML编辑器,你会看到外键:

  <Association Name="Table1_Table2" Member="Table1" ThisKey="Table2ID" OtherKey="ID" Type="Table2" IsForeignKey="true" />

打开designer.cs文件,你会看到的,有一个属性来实现外键System.Data.Linq.Mapping.AssociationAttribute由或一个支持EntityRefEntitySet

如果您使用反射,寻找AssociationAttribute


如果您没有使用设计器生成的模型类,装饰用自己的属性,这些属性,所以你可以找到他们。



Answer 2:

这里是一个例子,以收集具有特殊属性中定义的ForeignKeys; 对于这个问题,“AssociationAttribute”和给定的类,在这个例子中“类名”里面。

感谢David B为指导。

public void Get<TAttribute>(object obj, bool inherit) where TAttribute : System.Attribute
{
     var ForeignKeyCollection = typeof(ClassName).GetProperties(BindingFlags.Instance | BindingFlags.Public)
                .Where(p => p.GetCustomAttributes(typeof(TAttribute), true).Any())
                .Select(p => new
                                 {
                                     Property = p,
                                     Attribute = (AssociationAttribute)Attribute.GetCustomAttribute(p, typeof(TAttribute), true)
                                 })
                .Where(p => p.Attribute.IsForeignKey).ToList();
}


文章来源: In Linq to Sql How to get all the foreign key fields for an entity