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表,现在一切正常。