Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 0…1关联上的实体框架基数问题_Entity Framework_Model Associations_Entity Framework 4.3_Cardinality - Fatal编程技术网

Entity framework 0…1关联上的实体框架基数问题

Entity framework 0…1关联上的实体框架基数问题,entity-framework,model-associations,entity-framework-4.3,cardinality,Entity Framework,Model Associations,Entity Framework 4.3,Cardinality,我的数据库表如下所示: 任务可以映射到模块,也可以根本不映射(0…1)。我首先使用实体框架数据库,当我从数据库生成模型时,任务实体以模块作为集合(0或更多)完成。因此,我打开了我的EDMX并将任务上的“模块”导航属性更改为0…1 现在,当我尝试编译时,出现以下错误: 错误3003:映射从第1241行开始的片段时出现问题:给定关联最终成员任务的基数,应该将其映射到表TaskModule的键列。修复映射或更改此端的多重性 我不明白我需要做什么来解决这个问题。我已经查看了协会的详细信息,看不出问题

我的数据库表如下所示:

任务
可以映射到
模块
,也可以根本不映射(0…1)。我首先使用实体框架数据库,当我从数据库生成模型时,任务实体以模块作为集合(0或更多)完成。因此,我打开了我的EDMX并将任务上的“模块”导航属性更改为0…1

现在,当我尝试编译时,出现以下错误:

错误3003:映射从第1241行开始的片段时出现问题:给定关联最终成员任务的基数,应该将其映射到表TaskModule的键列。修复映射或更改此端的多重性

我不明白我需要做什么来解决这个问题。我已经查看了协会的详细信息,看不出问题所在。我知道我可能错过了一些愚蠢的事情,但我完全被卡住了。关联属性:


Visual Studio 2010 SP1,实体框架4.3.1.0,SQL Server 2008 R2。

您的数据库架构与您给出的描述不正确:

TaskModule表包含多对多关系,而不是多对一或零关系

在edmx中,不显示多对多关系表,但它们仍然存在于数据库中


所以你应该修复你的数据库,或者对EF提出的关系感到满意

一种方法是重新定义TaskModule表的主键。主键不是(TaskId,ModuleName),而是(TaskId)。然后从数据库中更新模型,并手动更改未从该更新中获取的任何关联。

没有意义使用TaskModule表。ModuleName应为中的可空外键Task@Raphaël Althaus在我看来,这是一个哲学上的答案(即违反了第三条NF,但你是否应该还是有争议的)。你能给我指一下支持你POV的材料吗?看看这是一个很好的问题,迪恩。我想我是少数,也许我是老派,但可空外键真的让我摸错了方向。我按照您的建议更改了TaskModule表,现在一切正常。