EF框架中外键问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EF框架中外键问题相关的知识,希望对你有一定的参考价值。

小弟新手,最近在学习mvc4,遇到点小问题,请教各位大虾。部门表(Dept)需要一个字段来标识当前部门的上级部门(parentId),这就相当于本表的主键同时是本表的外键,在创建实体类的时候不知道怎么搞了。网上搜了,貌似不是很靠谱。跪谢!!

参考技术A 可以直接关联的,在著名的罗斯文数据库的Employee表就是这种情况,员工有管理者,自己的主键又作为外键,没什么问题。追问

我知道可以写,我想知道怎么写
public class Department

[Key]
public int DeptId get; set;
public virtual Department ParentDept get; set;

这么写外键保存不了

追答

你就在数据库里面先设置了,然后更新到model不就有了?

追问

EF是code first模式,根据model生成数据库,表里外键已经生成了,View层中没有

追答

可以混用两种模式的,从数据库生成到model,只选择你那个表就行了。

如何使用java计算SQL数据库中外键的数量[重复]

【中文标题】如何使用java计算SQL数据库中外键的数量[重复]【英文标题】:How to count the number of foreign keys in a SQL database using java [duplicate] 【发布时间】:2018-09-02 05:21:21 【问题描述】:

如何使用java计算SQL数据库中的外键数。我得到了一个数据库,里面有很多表。我必须计算 id 中存在的外键总数。我正在通过 Java 执行查询。

【问题讨论】:

查询information_schema.STATISTICS表..我相信INDEX_TYPE列会告诉你该列是否是外键。 docs.oracle.com/javase/8/docs/api/java/sql/…。如果您使用的是 JDBC。 【参考方案1】:

您所要做的就是在您的数据库上使用 Java 执行以下查询。

SELECT 
  TABLE_NAME,COLUMN_NAME,CONSTRAINT_NAME, REFERENCED_TABLE_NAME,REFERENCED_COLUMN_NAME
FROM
  INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE
  REFERENCED_TABLE_SCHEMA = '<database>' 

参考:How do I see all foreign keys to a table or column?

【讨论】:

【参考方案2】:

供应商可以独立使用 DatabaseMetaData 及其 getExportedKeysgetImportedKeys 在所有表上。

DatabaseMetaData meta = conn.getMetaData();
try (ResultSet rs = meta.getExportedKeys(conn.getCatalog(), null, null)) 
    while (rs.next()) 
        String pkTable = rs.getString("PKTABLE_NAME");
        String fkTable = rs.getString("FKTABLE_NAME");
        String fkColumn = rs.getString("FKCOLUMN_NAME");
        int keySeq = rs.getInt("KEY_SEQ");
        ...
    

【讨论】:

以上是关于EF框架中外键问题的主要内容,如果未能解决你的问题,请参考以下文章

实体框架代码优先主键约束名称

EF实体框架之CodeFirst六

EF查询视图只得到一条记录

具有 2 个外键实体框架的表

c# 有啥框架能取代EF的?

EF Code首先级联删除外键一对多