entity framework0..1到0关系
class First { [Key] public int Id { get; set; } } class Second { [Key] public int Id { get; set; } public int? First_Id { get; set; } [ForeignKey("First_Id")] public First First { get; set; } } public class SecondMapping : EntityTypeConfiguration { public SecondMapping () : base() { this.HasOptional(s => s.First) .With ... ??? } }
第二个可能参考First。 但是First从来没有提到过Second。 是否可以将此映射应用于Entity Framework 4.1?
编辑:以前,这是我的解决方案:
this.HasOptional(s => s.First) .WithOptionalDependent() .WillCascadeOnDelete(false);
第二个可以包含First的一个实例(取决于某种Usage-Attribute)。 首先不包含Second的任何实例。
只有当外键也是从属实体的主键时,才能实现一对一的关系。 所以正确的映射是:
class First { [Key] public int Id { get; set; } } class Second { [Key, ForeignKey("First")] public int Id { get; set; } public First First { get; set; } }
原因是要在数据库中强制实施一对一关系,外键在Second
实体中必须是唯一的。 但entity framework不支持唯一键 – EF唯一的唯一值是主键。 这是EF的限制。
Morteza Manavi的博客上描述了解决方法。 解决方法基于将关联映射为一对多,并通过在自定义数据库初始化程序中引入唯一约束来强制执行数据库中的唯一性。
如果您尝试实现一对一关系,其中最多只有一个与First
一个实体关联的First
实体,并且没有反向属性,请尝试以下操作:
class First { [Key] public Guid FirstId { get; set; } } class Second { [Key] public Guid FirstId { get; set; } public First First { get; set; } } class SecondMapping : EntityTypeConfiguration { public SecondMapping() { this.HasRequired(s => s.First); } }
但是,您可以使用单独的First_id
列来执行此类关联,但是您可以有效地创建1对N关系。 它可以通过UNIQUE约束“强制”为1对1,但由于EF的限制,您将无法创建反向属性(如Ladislav所述):
上述就是C#学习教程:entity framework0..1到0关系分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
class SecondMapping : EntityTypeConfiguration { public SecondMapping() { this.HasRequired(s => s.First).WithMany().HasForeignKey("First_id"); } }
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/959023.html