C# 数据访问层DatabaseContext我必须映射我的类的所有关系吗?

C# 数据访问层DatabaseContext我必须映射我的类的所有关系吗?,c#,asp.net-mvc,relational-database,entity-relationship,C#,Asp.net Mvc,Relational Database,Entity Relationship,在我的OnModelCreating方法中,我是否必须像对待Tickets和Administrator类那样映射每个表的关系 我读了这篇文章,作者只做了其中一个关系,但不是全部。如果您在我提供的链接中向下滚动“通过向数据库上下文添加代码来自定义数据模型”,您将看到我所说的内容 资料来源: IssueContext.cs public class IssueContext : DbContext { public DbSet<User> Users { get;

在我的
OnModelCreating
方法中,我是否必须像对待
Tickets
Administrator
类那样映射每个表的关系

我读了这篇文章,作者只做了其中一个关系,但不是全部。如果您在我提供的链接中向下滚动“通过向数据库上下文添加代码来自定义数据模型”,您将看到我所说的内容

资料来源:

IssueContext.cs

public class IssueContext : DbContext
    {
        public DbSet<User> Users { get; set; }
        public DbSet<Ticket> Tickets { get; set; }
        public DbSet<Category> Categories { get; set; }
        public DbSet<Department> Departments { get; set; }
        public DbSet<Administrator> Administrators { get; set; }
        public DbSet<Depot> Depots { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();

            modelBuilder.Entity<Ticket>()
                .HasMany(c => c.Administrators).WithMany(i => i.Tickets)
                .Map(t => t.MapLeftKey("TicketID")
                    .MapRightKey("AdministratorID")
                    .ToTable("Adminstrators on Tickets"));

            }
    }
public类IssueContext:DbContext
{
公共数据库集用户{get;set;}
公共数据库集票证{get;set;}
公共数据库集类别{get;set;}
公共数据库集部门{get;set;}
公共数据库集

在我的OnModelCreating方法中,我是否必须像对待票据和管理员类那样映射每个表的关系

EF代码首先附带了一些默认约定,比如您已经通过调用这行代码禁用的约定:

modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
modelBuilder.Conventions.Remove();
这些约定有助于EF代码首先了解:

  • 哪个实体属于哪个表
  • 谁是主键,
  • 实体之间的关系是什么,并将这些关系创建到数据库表中
如果遵循约定,则不需要使用fluent API或数据注释属性编写连接配置

您将使用以下配置:

modelBuilder.Entity<Ticket>()
            .HasMany(c => c.Administrators).WithMany(i => i.Tickets)
            .Map(t => t.MapLeftKey("TicketID")
            .MapRightKey("AdministratorID")
            .ToTable("Adminstrators on Tickets"));
modelBuilder.Entity()
.HasMany(c=>c.Administrators)。WithMany(i=>i.ticket)
.Map(t=>t.MapLeftKey(“TicketID”)
.MapRightKey(“管理员ID”)
.ToTable(“票务管理员”);
这很有用,因为如果让EF在
Ticket
Administrator
之间生成联接表,您将有一些问题需要知道哪个是左键,哪个是右键。您还可以告诉EF将
TicketID
AdministratorID
生成为列名,而不是
TicketID
AAdministrator_ID
是它将在联接表上使用的默认名称

回答您的问题。不,您不需要为所有实体添加映射。尽可能使用约定,然后使用流畅的配置或数据注释属性来调整和优化某些列、表等,就像对联接表所做的那样


旁注:
票证管理员
不是一个好的表格名称,请使用
票证管理员

非常感谢您为我详细解释这一点。非常感谢!现在感谢您,我完全理解了他为什么没有绘制所有地图。