ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

c# – 如何以一对一/零关系指定外键?

2019-06-08 11:05:13  阅读:203  来源: 互联网

标签:c entity-framework ef-fluent-api


我有一个父实体和一个子实体.

在DB中,父级的主键是p_p_id
并且子项中的外键与p_p_id相同

数据库中没有外键约束.

实体在各自的类中设置属性,指向彼此.

家长班

public virtual ChildProject ThisChildProject { get; set; }

儿童班

public virtual ParentProject ThisParentProjection { get; set; }

这些属性上没有注释,也没有任何类的ID.

在配置中,我试图在孩子中进行映射.

HasRequired(i => i.ThisParentProject).WithOptional(o => o.ThisChildProject );

EF会尝试使用子键的主键和父键的主键进行映射.

但是我想在子节点中使用已定义的FK和父节点的主键

解决方法:

默认情况下,EF使用所谓的Shared Primary Key Association,它将依赖实体PK用作主体实体的FK.

您可以通过Map – >指定隐藏(阴影)FK名称来覆盖该行为. MapKey流畅配置:

HasRequired(e => e.ThisParentProject)
   .WithOptional(e => e.ThisChildProject)
   .Map(m => m.MapKey("p_p_id"));

更新:请注意隐藏(阴影)字. EF不支持此类关系的显式FK属性 – 没有HasForeignKey流畅方法,并且将ForeignKey属性导致错误.所以如果你在ChildProject类中有这样的东西:

[Column("p_p_id")]
public int ThisParentProjectId { get; set; }

我担心唯一的选择是删除它并仅使用导航属性.

标签:c,entity-framework,ef-fluent-api
来源: https://codeday.me/bug/20190608/1197391.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有