Entity framework 首先在实体框架代码中将两个不同表的主键映射到另一个表
我首先使用实体框架4.3.1代码。我的数据库中有两个表,列有它们的列名: 状态表:Entity framework 首先在实体框架代码中将两个不同表的主键映射到另一个表,entity-framework,entity-framework-4,entity-framework-4.1,ef-code-first,code-first,Entity Framework,Entity Framework 4,Entity Framework 4.1,Ef Code First,Code First,我首先使用实体框架4.3.1代码。我的数据库中有两个表,列有它们的列名: 状态表: StatusID int Status varchar(50) RequestStatusID int RequestStatus varchar(50) RequestStatusID RequestStatus 1 RequestStatus1 2 RequestStatus2 3 Requ
StatusID int
Status varchar(50)
RequestStatusID int
RequestStatus varchar(50)
RequestStatusID RequestStatus
1 RequestStatus1
2 RequestStatus2
3 RequestStatus3
4 RequestStatus4
StatusID Status
1 Status1
2 Status2
3 Status3
4 Status4
请求状态表:
StatusID int
Status varchar(50)
RequestStatusID int
RequestStatus varchar(50)
RequestStatusID RequestStatus
1 RequestStatus1
2 RequestStatus2
3 RequestStatus3
4 RequestStatus4
StatusID Status
1 Status1
2 Status2
3 Status3
4 Status4
我有两门课:
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());
}
}
状态表:
StatusID int
Status varchar(50)
RequestStatusID int
RequestStatus varchar(50)
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中设置thtis我想您需要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();
}
}
类状态配置:EntityTypeConfiguration
{
内部状态配置()
{
这是可更改的(“状态”);
this.Property(x=>x.Id).HasColumnName(“StatusID”);
this.Property(x=>x.Name).HasColumnName(“状态”);
this.HasRequired(x=>x.RequestStatus)
.WithRequiredPrincipal();
}
}
类RequestStatusConfiguration:EntityTypeConfiguration
{
内部RequestStatusConfiguration()
{
此.ToTable(“请求状态”);
this.Property(x=>x.Id).HasColumnName(“RequestStatusID”);
this.Property(x=>x.Name).HasColumnName(“RequestStatus”);
this.HasRequired(x=>x.Status)
.WithRequiredDependent();
}
}
谢谢,这对我很有用。只有两个问题。。EF如何知道映射2个主键?如果我想映射到其他两个字段而不是ID,那么代码会是什么样子?这是因为您正在设置RequiredDependant和RequiredPrincipal映射-通过设置这些映射,EF做出了所需的假设。如果您想映射到其他字段,您可以在fluent映射的末尾添加一个.map(m=>m.MapKey(“KeyName”)