EntityFramework:1:0..1关系反序列化为集合

时间:2016-08-23 12:31:24

标签: c# mysql entity-framework foreign-keys

我对entityframewrok有一个问题,它将两个表之间的1:0..1关系序列化为一个集合。

我的数据库中有2个表:

CREATE TABLE `revisiones` (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  ---Irrelevant columns here---
  PRIMARY KEY (`Id`),
  ---Irrelevant constraint and foreign keys here---
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

CREATE TABLE `ficha_deposito` (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `IdRevision` int(11) NOT NULL,
  ---Irrelevant Columns Here---
  PRIMARY KEY (`Id`),
  UNIQUE KEY `IdRevision_UNIQUE` (`IdRevision`),
  CONSTRAINT `fk_ficdep_rev` FOREIGN KEY (`IdRevision`) REFERENCES `revisiones` (`Id`) ON DELETE CASCADE ON UPDATE CASCADE,
  ---Irrelevant constraints here---
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

正如您所看到的那样,由于唯一的限制,修订可能与无关或1 ficha_deposito相关。

但是在edmx文件中,关系被序列化为集合:

enter image description here

如果我尝试手动更改它(我宁愿不这样做,因为如果我必须重新生成模型,我将不得不再次手动设置值),然后我得到一个例外:

Running transformation: Multiplicity is not valid in Role 'ficha_deposito' in relationship 'fk_ficdep_rev'. Because the Dependent Role properties are not the key properties, the upper bound of the multiplicity of the Dependent Role must be *.

为什么我不能改变关系的多样性? revision.ficha_deposito应为null或简单对象。

1 个答案:

答案 0 :(得分:1)

这是EF6的限制。 EF通过所谓的Shared Primary Key Associations自然支持one-to-one关系,其中依赖实体中没有单独的FK,但PK也用作主表的FK。

当依赖实体使用单独的FK字段时,即使它使用唯一约束进行备份,从EF角度来看,它仍然是one-to-many关系。我无法解释它比One-to-One Foreign Key Associations

更好
  

您可能已经注意到,流畅的API代码中的两个关联都已配置为多对一 - 而不是一对一,正如您可能预期的那样。原因很简单:Code First(和一般的EF)本身支持一对一的外键关联。事实上,EF根本不支持涉及唯一约束的任何关联场景。

然后

  

缺乏支持对我们造成的第二个限制更为重要:一对一外键关联不能双向(例如,我们无法在Address类上为User定义属性)。

好消息是这种支持已被添加到EF Core中,因此当它变得可用时(v1.1或更高版本),您将能够建立这样的关系。在那之前,你应该和one-to-many一起生活。