实体框架查找外键

4

我希望能够查找实体模型中某个实体的所有外键。

我已经使用以下方法获取了实体的所有属性列表:

var workspace = _entities.MetadataWorkspace; 
var entityType = workspace.GetItems<EntityType>(DataSpace.CSpace).FirstOrDefault(e => e.Name == tablename);
var keyNames = entityType.Members.Select(k => k.Name);

有没有办法仅查找具有外键关联的属性?还可以找出与其相关联的参考实体中的属性吗?

1个回答

8
我已经想出了解决方案:
var fk = _entities.MetadataWorkspace
    .GetItems<AssociationType>(DataSpace.CSpace)
    .Where(a => a.IsForeignKey);

// Check if the table has any foreign constraints for that column
var fkname = fk
    .Where(x => x.ReferentialConstraints[0].ToRole.Name == tablename)
    .Where(x => x.ReferentialConstraints[0].ToProperties[0].Name == columnname);

// Get the corresponding reference entity column name
var refcol = fkname
    .Select(x => x.ReferentialConstraints[0].FromProperties[0].Name)
    .First();

1
我很想为此点赞,但我无法弄清如何使用它。如果包含“using”语句并且(警告:圣战)不在学习/教学示例中使用“var”,那将非常有帮助。同时提供PackageReference名称和版本也会很有帮助。 - granadaCoder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接