EF6帮助定义模型的外键(可选的外键和冲突的多重性)

扎希卡拉姆

我是EF6和fluent API的新手,但在尝试打扰您之前,我确实尝试了所有可能,但现在有点困扰。

我有以下模型:

public class Event
{
    public int Id { get; set; }
    [Required]
    public string Label { get; set; }
}

public class Address
{
    public int Id { get; set; }
    [Required]
    public String City { get; set; }

}

这是我想做的事情:

  1. 活动应包含必填字段 Address
  2. 该地址可以用于事件或其他类中(Person例如,让我们称之为它)。因此,它不应该直接绑定到Event
  3. 删除Event(或Person)时,我要级联并删除链接Address

通过查看文档并在网上搜索,我在Fluent API中尝试了许多可能性。尽管如此,我仍然遇到各种问题:多重性冲突,模型不一致或无法在删除时级联。

有人可以帮忙吗?我真的被卡住了!:)

谢谢!

!!!更​​新!!! 根据要求,这是我能找到的最佳解决方案:

public class Event
{
    public int Id { get; set; }
    [Required]
    public string Label { get; set; }
    [Required]
    public virtual Address.Address Address { get; set; }
}

public class Address
{
    public int Id { get; set; }
    [Required]
    public String City { get; set; }
}

并且流利的代码如下:

modelBuilder.Entity<Event>()
            .HasRequired(e => e.Address)
            .WithOptional()
            .Map(e => e.MapKey("AddressId"))
            .WillCascadeOnDelete(true);

此实现将事件表中的外键添加到地址表中。但是,级联删除操作将按以下方向进行:删除地址将删除事件。不幸的是,我试图做到相反:我希望仅在事件发生时才删除地址!

再次感谢你 :)

格特·阿诺德

您的要求相互冲突。

  • 级联删除是从主要到相关的,所以当一个Address应当删除当Event是时,Event必须是委托人(实体其中外国指)。
  • 如果一个以上的类必须具有Address,则其他类应引用Address,从而成为Address主体。

还有一种选择。Address可以有两个外键toPerson和to Event但这并不是很吸引人,因为键必须都可以为空,并且没有数据库约束来强制要求它们是互斥的。

另一种选择是制作Address一个复杂的类型,因此EventPerson表都将具有所有地址列。当然,这还没有很好地规范化,您不能Addresses作为单独的实体来处理,但是至少没有级联问题,因为地址是Event记录的一部分

我认为您最好的选择是让多个类引用Address并编写逻辑以删除孤立地址。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

EF6:复合主键字段作为外键(ALTER TABLE语句与FOREIGN KEY约束冲突)

来自分类Dev

Django多重外键模型

来自分类Dev

EF6:在SQL Server DB的模型生成中无法识别外键

来自分类Dev

EF6:在SQL Server DB的模型生成中无法识别外键

来自分类Dev

EF6对外键的唯一约束

来自分类Dev

EF6 CF中的外键问题

来自分类Dev

EF6 ApplicationUser错误的多个外键

来自分类Dev

在EF6中更新外键对象

来自分类Dev

Sequelize模型的外键定义

来自分类Dev

在EF6中建模外键的复合键(建模为实体引用)

来自分类Dev

UML:可选外键

来自分类Dev

我可以在EF6中使用外键来唯一约束吗?

来自分类Dev

EF6代码优先:使用Fluent API声明外键

来自分类Dev

EF6不从数据库生成外键关联

来自分类Dev

EF6为可为空的外键生成空子实体

来自分类Dev

外键查找下拉列表EF 6

来自分类Dev

MVC 6使用外键编辑模型

来自分类Dev

外键与Django模型中的相关字段冲突

来自分类Dev

Django和外键

来自分类Dev

Django和外键

来自分类Dev

EF6代码优先-使用不匹配的外键配置一对一关系

来自分类Dev

如何使用EF6 Code First将外键属性公开给具有导航属性的现有实体

来自分类Dev

EF6代码优先-使用不匹配的外键配置一对一关系

来自分类Dev

JPA中的级联设置和休眠中的外键冲突

来自分类Dev

实体类型没有定义键EF6

来自分类Dev

EF-外键属性

来自分类Dev

基于外键EF的主键

来自分类Dev

EF无法映射外键

来自分类Dev

使用外键添加模型