2

我想在我的实体的表中获取所有外键列。例如:

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

结果应该是这样的:

  • ColumnWithForeignKey1Id
  • ColumnWithForeignKey2Id
  • ColumnWithForeignKey3Id
4

2 回答 2

1

在 xml 编辑器中打开 dbml 文件,您将看到外键:

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

打开 Designer.cs 文件,您将看到外键实现为具有 a 的属性,该属性System.Data.Linq.Mapping.AssociationAttribute由 aEntityRefEntitySet.

如果您使用反射,请查找AssociationAttribute.


如果您不使用设计器来生成建模类,请使用您自己的属性装饰这些属性,以便您可以找到它们。

于 2012-07-10T20:26:49.890 回答
0

这是一个示例,用于收集使用特殊属性定义的 ForeignKeys;对于这个问题“AssociationAttribute”和给定的类,对于这个例子“ClassName”。

感谢您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();
}
于 2012-08-07T15:06:17.353 回答