SQL Server(EF核心)中从许多实体到一个实体的多重关系

时间:2020-05-31 17:05:20

标签: sql-server entity-framework entity-framework-core

有人可以帮助我吗?我想对数据库设置约束,例如:

  • 第一个实体为Triangle(三角形ID,名称,边号)
  • 第二个实体为Square(Square_Id,名称,边号)
  • 第三实体是Area(Area_Id,ObjectId,Area_value)
  • 第四实体为Circle(Circle_Id,名称,半径)

如何从实体TriangleSquareArea中添加约束,使我无法在ObjectId列中写入除三角形或正方形之外的任何其他类型的对象?

我试图写FK约束,但是出错了。

  • FK_Area_Triangle_ObjectId(area_ObjectId == triangle_Id)
  • FK_Area_Square_ObjectId(area_ObjectId == square_Id)

2 个答案:

答案 0 :(得分:0)

同一列上不能有两个不同的外键约束,但是这里有一些选项可供回答:Foreign Key to multiple tables

  1. 您可以简单地在Area中创建两列,SquareId和TriangleId,并对每个表具有可空的外键。您还可以添加一个约束,即必须完全填充这两列之一。
  2. 建模一个实体,该实体同时充当Square和Triangle的基础,并且Area引用该实体

答案 1 :(得分:0)

在两个表之间定义了外键。它不能在表和视图之间建立,这将直接解决您的任务。

如果要创建一个标量函数来检查两个表中的记录并返回1(如果找到)和0(如果没有),则可以做什么。然后施加一个约束,使该函数应为1。