我希望能在这个实体表中的所有外键列。 例如:
class User
{
Id {get;set;}
Name {get;set;}
ColumnWithForeignKey1Id{get;set;}
ColumnWithForeignKey2Id{get;set;}
ColumnWithForeignKey3Id{get;set;}
}
结果应该是这样的:
- ColumnWithForeignKey1Id
- ColumnWithForeignKey2Id
- ColumnWithForeignKey3Id
打开你的dbml文件的XML编辑器,你会看到外键:
<Association Name="Table1_Table2" Member="Table1" ThisKey="Table2ID" OtherKey="ID" Type="Table2" IsForeignKey="true" />
打开designer.cs文件,你会看到的,有一个属性来实现外键System.Data.Linq.Mapping.AssociationAttribute
由或一个支持EntityRef
或EntitySet
。
如果您使用反射,寻找AssociationAttribute
。
如果您没有使用设计器生成的模型类,装饰用自己的属性,这些属性,所以你可以找到他们。
这里是一个例子,以收集具有特殊属性中定义的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();
}