worker 只能拥有一辆车,并且车辆一次只能属于一名 worker 。
我知道有 3 种可能的实现:
1.
Vehicle(Id, Number)
Worker(Id, Name, VehicleId)
--> This allows two workers have the same vehicle.
2.
Worker(Id, Name)
Vehicle(Id, Number, WorkerId)
--> This allows worker to have two vehicles.
3.
Worker(Id, Name)
Vehicle(Id, Number)
WorkersVehicles(Id, VehicleId, WorkerId)
--> This allows each worker to have many vehicles and each vehicle to belong to many workers.
以上都无法描述所需的 1:1 关系。
如何在数据库和 Entity Framework 中描述这种 1:1 关系?
最佳答案
定义仅通过约束强制执行 1:1 关系的数据模型是不可能的,因为这需要循环引用,这意味着您永远无法插入关系的一侧,直到另一侧存在。
虽然可以通过技巧来解决这个问题(放弃约束,使用 RDBMS 特定的命令,如 Oracle 的延迟约束),但在传统意义上这是不可能的。您可以获得的最接近的是 1:0..1
。
以下是代表 Worker:Vehicle
的各种组合的模型:
0..1:1
Worker (ID, VehicleID unique constraint)
Vehicle (ID)
1:0..1
Worker (ID)
Vehicle (ID, WorkerID unique constraint)
0..1:0..1
Worker (ID)
Vehicle (ID)
WorkerVehicle (WorkerID, VehicleID) <-- primary key on one column,
unique constraint on the other
不幸的是,由于 EF 不支持唯一约束(或者更确切地说,它不识别或强制执行它们),因此您最终总是会得到关系另一端的集合而不是单个实体。
关于c# - 1对1的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6481711/