Entity framework 实体框架-SSDL和CSDL中的不同多重性
我用的是EFV1。我有以下表格: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
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();