我有一个遗产表我需要连接我的应用程序。我使用的是代码优先的POCO模型。我有以下课程:
public class Equipment
{
[Key]
public string EquipmentId { get; set; }
public string OriginatorId { get; set; }
public virtual Employee Employee { get; set; }
}
public class Employee
{
[Key]
[Column("employee_id")]
public string EmployeeId { get; set; }
public string EmployeeName { get; set; }
[ForeignKey("OriginatorEmployeeId")]
public virtual Equipment Equipment { get; set; }
}
我需要将Employee类中的EmployeeId映射到Equipment类中的OriginatorEmployeeId。
此外,遗留表由Employee类表示。该表实际上命名为employee(小写),EmployeeId列名为“employee_id”。我想保持我的类和属性的命名与应用程序的其余部分一致,因此Employee和EmployeeId。
以下是我尝试使用流畅的API:
modelBuilder.Entity<Employee>().Map(m =>
{
m.MapInheritedProperties();
m.ToTable("employee");
});
modelBuilder.Entity<Equipment>()
.HasOptional<Employee>(u => u.Employee)
.WithOptionalDependent(c => c.Equipment).Map(p => p.MapKey("OriginatorEmployeeId"));
我可能会混合我不需要的东西。我现在得到的错误是:
Multiplicity is not valid in Role 'Equipment_Employee_Source' in relationship 'Equipment_Employee'. Because the Dependent Role properties are not the key properties, the upper bound of the multiplicity of the Dependent Role must be '*'.
感谢任何帮助。
答案 0 :(得分:4)
员工记录能否与多个设备记录相关联?如果他们可以,那么您的员工POCO应该包含代表员工和设备之间一对多关系的集合属性。
public virtual ICollection<Equipment> Equipments {get;set;}
然后应相应调整您的配置以显示此关系:
modelBuilder.Entity<Employee>()
.HasMany<Equipment>(u => u.Equipments)
.WithRequired(c => c.Employee).HasForeignKey(p => p.OriginatorId);
看起来您还需要为列名映射设置配置。因此,我建议您为每个POCO创建一个单独的配置文件,以便更轻松地管理配置,然后将这些配置添加到DBContext的OnModelCreating事件中的modelbuilder.Configurations集合中
public class EmployeeConfiguration : EntityTypeConfiguration<Employee>
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelbuilder.Configurations.Add(new EmployeeConfiguration());
}