gpt4 book ai didi

c# - EF 代码优先映射混淆

转载 作者:太空宇宙 更新时间:2023-11-03 13:20:00 24 4
gpt4 key购买 nike

我目前正在使用 Entity Framework Fluent API 进行代码优先方法映射配置,因为我遇到了一些令人困惑的场景。

我的模型和映射配置

我有两个类(class):组织类(class)

public class Organisation {
public int Id { get; set; }
public virtual ICollection<Course> Courses { get; set; }
}

public class Course {
public int Id { get; set; }
public int OrganisationId { get; set; }
}

我的映射配置如下:

public class OrganisationSchema : EntityTypeConfiguration<Organisation>
{
public OrganisationSchema()
{
ToTable(typeof(Organisation).Name);
HasKey(x => x.Id);
HasMany(x => x.Courses).WithRequired(x => x.Organisation).HasForeignKey(x => x.OrganisationId);
}
}

public class CourseSchema : EntityTypeConfiguration<Course>
{
public CourseSchema()
{
ToTable(typeof(Course).Name);
HasKey(x => x.Id);
HasRequired(x => x.Organisation).WithMany(x => x.Courses).HasForeignKey(x => x.OrganisationId);
}
}

我的目标

我的模型目标是拥有一个包含许多类(class)的组织,而类(class)只有一个组织。

此外,如果我删除一个组织,我希望 EF 删除所有相关的类(class)。但是,如果我删除类(class),则不应删除任何组织。

问题

  1. 现在,在我的映射配置中,我明确告诉一个组织有很多类(class)并指出外键。然后我在一门类(class)中讲述完全相同的内容,只是反过来。 这种双向映射真的有必要吗,或者我可以跳过其中一侧吗? EF 需要多少映射配置才能理解我的目标?我真的不想破坏我的代码,也不想破坏我的脑袋。

  2. 根据我的目标,我需要一些实体删除处理。我知道这是使用 WillCascadeOnDelete() 扩展配置的,但我不明白这个扩展。 我应该在我的映射配置中的什么位置设置 WillCascadeOnDelete() 扩展?双方中的哪一方 - 或双方?它如何影响? bool 参数值说明了什么?

最佳答案

public class Organisation {
public int Id { get; set; }
public virtual ICollection<Course> Courses { get; set; }
}

public class Course {
public int Id { get; set; }
public virtual Organisation Organisation { get; set; }
}



public class OrganisationSchema : EntityTypeConfiguration<Organisation>
{
public OrganisationSchema()
{
ToTable(typeof(Organisation).Name);
HasMany(x => x.Courses).WithRequired(x => .Organisation).WillCascadeOnDelete();
}
}

我认为上述配置应该可以满足您的要求。它使用一些约定来定义外键,并将映射配置保持在最低限度。

关于c# - EF 代码优先映射混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24664138/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com