0

我首先使用 Entity Framework 4.3.1 代码。我的数据库中有 2 个表,其中列出了它们的列名:

状态表:

StatusID int
Status varchar(50)

请求状态表:

RequestStatusID int
RequestStatus varchar(50)

我有 2 节课:

public class Status : IEntity
{
     public int Id { get; set; }
     public string Name { get; set; }

     public RequestStatus RequestStatus { get; set; }
}

public class RequestStatus : IEntity
{
     public int Id { get; set; }
     public string Name { get; set; }

     public Status Status { get; set; }
}

我的数据库上下文类:

public class ICaseDbContext : DbContext
{
     public DbSet<Status> Statuses { get; set; }
     public DbSet<RequestStatus> RequestStatuses { get; set; }

     protected override void OnModelCreating(DbModelBuilder modelBuilder)
     {
          modelBuilder.Configurations.Add(new StatusConfiguration());
          modelBuilder.Configurations.Add(new RequestStatusConfiguration());
     }
}

他们的配置:

class StatusConfiguration : EntityTypeConfiguration<Status>
{
     internal StatusConfiguration()
     {
          this.ToTable("Statuses");
          this.Property(x => x.Id).HasColumnName("StatusID");
          this.Property(x => x.Name).HasColumnName("Status");
     }
}

class RequestStatusConfiguration : EntityTypeConfiguration<RequestStatus>
{
     internal RequestStatusConfiguration()
     {
          this.ToTable("RequestStatuses");
          this.Property(x => x.Id).HasColumnName("RequestStatusID");
          this.Property(x => x.Name).HasColumnName("RequestStatus");
     }
 }

每个表中的数据是这样的:

请求状态表:

RequestStatusID     RequestStatus
1                   RequestStatus1
2                   RequestStatus2
3                   RequestStatus3
4                   RequestStatus4

状态表:

StatusID            Status
1                   Status1
2                   Status2
3                   Status3
4                   Status4

每个表的主键与另一个表中的主键匹配。所以如果我有一个RequestStatus1的请求状态,那么对应的状态一定是Status1。如果我的状态为 Status3,则相应的请求状态必须为 RequestStatus3。

这可能吗?

如何在 EF 中进行设置

4

1 回答 1

0

我认为你想要一个 1:1 的映射,所以两端都是必需的,使用 Id 作为键。

像这样更新您的配置将创建您想要的表:

class StatusConfiguration : EntityTypeConfiguration<Status>
{
    internal StatusConfiguration()
    {
        this.ToTable("Statuses");
        this.Property(x => x.Id).HasColumnName("StatusID");
        this.Property(x => x.Name).HasColumnName("Status");

        this.HasRequired(x => x.RequestStatus)
            .WithRequiredPrincipal();

    }
}

class RequestStatusConfiguration : EntityTypeConfiguration<RequestStatus>
{
    internal RequestStatusConfiguration()
    {
        this.ToTable("RequestStatuses");
        this.Property(x => x.Id).HasColumnName("RequestStatusID");
        this.Property(x => x.Name).HasColumnName("RequestStatus");

        this.HasRequired(x => x.Status)
           .WithRequiredDependent();
    }
}
于 2012-09-06T12:50:57.283 回答