我有项目类,其中每个项目都有其工作订单。 这些都是在MySQLEF流利的API - 获取相关实体
CREATE TABLE `project` (
`idProject` INT(11) NOT NULL AUTO_INCREMENT,
`idCompany` INT(11) NOT NULL,
`Title` VARCHAR(100) NULL DEFAULT NULL COLLATE 'utf8_unicode_ci',
PRIMARY KEY (`idProject`, `idCompany`),
INDEX `FK_project_company` (`idCompany`),
CONSTRAINT `FK_project_company` FOREIGN KEY (`idCompany`) REFERENCES `company` (`idCompany`) ON UPDATE NO ACTION ON DELETE NO ACTION
)
;
CREATE TABLE `project_workorders` (
`idProjectWO` INT(11) NOT NULL AUTO_INCREMENT,
`idProject` INT(11) NOT NULL DEFAULT '0',
`idWorkOrder` INT(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`idProjectWO`, `idProject`, `idWorkOrder`),
INDEX `FK_project_workorders_project` (`idProject`),
INDEX `FK_project_workorders_workorder` (`idWorkOrder`),
CONSTRAINT `FK_project_workorders_project` FOREIGN KEY (`idProject`) REFERENCES `project` (`idProject`) ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT `FK_project_workorders_workorder` FOREIGN KEY (`idWorkOrder`) REFERENCES `workorder` (`idWorkOrder`) ON UPDATE NO ACTION ON DELETE NO ACTION
);
创建表,然后有FluentAPI配置文件
class ProjectConfiguration : EntityTypeConfiguration<Project>
{
internal ProjectConfiguration()
{
this.HasKey(p => new { p.idProject , p.idCompany});
this.Property(p => p.idProject)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
this.HasRequired<MaxUser>(p => p.CreatedByUser)
.WithMany()
.HasForeignKey(p => p.CreatedByID);
this.HasMany(s => s.ProjectWO)
.WithRequired(w=>w.Project)
.HasForeignKey(k=>new { k.idProject,k.idProjectWO});
this.Map(m =>
{
m.MapInheritedProperties();
});
}
}
class ProjectWOConfiguration : EntityTypeConfiguration<ProjectWO>
{
internal ProjectWOConfiguration()
{
this.HasKey(p=> new { p.idProjectWO , p.idProject, p.idWorkOrder });
this.Property(p => p.idProjectWO)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
this.HasRequired<MaxUser>(p => p.CreatedByUser)
.WithMany()
.HasForeignKey(p => p.CreatedByID);
this.Map(m =>
{
m.MapInheritedProperties();
});
}
}
的问题是出现在项目的对象,我不能得到相关的实体。 不管我尝试什么,ProjectWO子对象总是空的。
任何帮助表示赞赏。
我的第一个猜测是此组合键周围。如果你喜欢的东西多租户场景处理,然后在顶层实体使用这些,但只要有可能,避免他们在下级实体。例如,对于ProjectWO,这看起来像一个链接项目和WO之间的g表? PK可以是idProjectWO。它可以包含2个FK,一个用于项目,另一个用于WorkOrder。没有必要创建一个组合键。在大多数情况下,我离开了FK领域的子实体,并使用.MAP(X => x.MapKey(“idProject”);特别是如果孩子将有一个参考实体父 –
感谢,@StevePy你!右键'ProjectWO'代表一个链接表,现在我已经删除了复合键并且只保留了FK,并且我在哪里放置了这个.Map(x => x.MapKey(“idProject”));?当我尝试它说“没有MapKey的定义...” – Jalle