I am using Entity Framework 4.3.1 code first. I have 2 tables in my database with their column names listed:
Statuses table:
StatusID int
Status varchar(50)
RequestStatuses table:
RequestStatusID int
RequestStatus varchar(50)
I have 2 classes:
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; }
}
My database context class:
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());
}
}
Their configurations:
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");
}
}
The data in each table is like this:
RequestStatuses table:
RequestStatusID RequestStatus
1 RequestStatus1
2 RequestStatus2
3 RequestStatus3
4 RequestStatus4
Statuses table:
StatusID Status
1 Status1
2 Status2
3 Status3
4 Status4
The primary key of each table matches the primary key in the other table. So if I have a request status of RequestStatus1 then the corresponding status must be Status1. If I have a status of Status3 then the corresponding request status must be RequestStatus3.
Is this possible?
How do I set thtis up in EF
I think you want a 1:1 mapping, so both ends are required, using Id’s as the key.
Updating your configurations like this will create the tables you want: