Entity framework 实体框架-SSDL和CSDL中的不同多重性

Entity framework 实体框架-SSDL和CSDL中的不同多重性,entity-framework,Entity Framework,我用的是EFV1。我有以下表格: CREATE TABLE category ( category_id int , category_name varchar(100) not null, CONSTRAINT PRIMARY KEY (category_id) ) CREATE TABLE categoryDetails ( detail_id int, category_desc varchar(100) not null, categor

我用的是EFV1。我有以下表格:

CREATE TABLE category ( 
  category_id    int , 
  category_name  varchar(100) not null,
 CONSTRAINT PRIMARY KEY  (category_id)
 )

CREATE TABLE categoryDetails ( 
  detail_id    int, 
  category_desc varchar(100) not null,
  category_id    int  NOT NULL, 
 CONSTRAINT PRIMARY KEY  (detail_id),
 CONSTRAINT FOREIGN KEY (category_id) REFERENCES category(category_id) 
 )
“类别”可以有0..1个“categoryDetails”

在由上述数据库生成的EF模型中,EF将SSDL和CSDL中的关系建模为*。 使用中的设计器CSDL,我可以将关系/关联从*更改为0..1。但在检查SSDL时,它仍然是*。 在SSDL中将其更改为0..1时,出现错误:

"Multiplicity is not valid in Role R111 in relationship RL111. Because the Dependent Role properties are not the key properties, the upper bound of the multiplicity of the Dependent Role must be *."
请告诉我如何更改SSDL

在这种情况下(CSDL中的0..1和SSDL中的*),将根据0..1关系为代码创建分部类(即每个类中的单个引用属性,包含另一个类的类型-不涉及集合)。 在运行代码时,它不会出错这是否正确(SSDL和CSDL中的多重性不同)?

对于无法更改表结构的情况,获得0..1关联的解决方案是什么


谢谢。

今天,除了PK列之外,EF不考虑唯一性。这意味着如果FK也不是PK,则SSDL中不能有0..1,因为就EF而言,数据库中没有任何内容“强制”基数约束

i、 e.EF不知道唯一性约束,所以它不相信你

但是,正如您所发现的,您可以将CSDL中的基数缩小到0..1,即使在SSDL中它仍然是*

由于EF强制基于CSDL的语义,这应该可以很好地工作

i、 e.此代码(CSDL中为0..1,SSDL中为*):

将尝试删除
oldDetails

警告:在EF 4.0中,存在另一种类型的关联(称为 )不像 独立协会(即 3.5)支持的类型您不能 缩小FK的基数 CSDL中的关联

希望这有帮助

亚历克斯

var category = ctx.Category.Include("Details").First(c => c.ID = 1);
var oldDetails = category.Details;
category.Details = new CategoryDetails {....};
ctx.SaveChanges();