【发布时间】:2018-07-07 15:55:27
【问题描述】:
我正在使用 Simon Hughes 的反向 POCO 生成器来生成我的域实体。
我有一个ProcedureLogbook 表,外键返回到Procedure 表。没什么特别的。只是对 Pk - m:1 的直接引用。我也与Procedure 表有第二关系。第二个关系没有让我感到悲伤,并且按预期命名 Navigation 属性,即 ReportingProcedure(FK 称为 FK_ProcedureLogbookType_ReportingProcedure)。
对于其他关系(主要关系),POCO 生成器在 ProcedureLogbook 类中创建一个名为 Procedure_ProcedureId 的导航属性,而不仅仅是 Procedure。 FK 称为FK_ProcedureLogbookType_Procedure。
代码如下所示:
/// <summary>
/// Parent Procedure pointed by [ProcedureLogbookType].([ProcedureId]) (FK_ProcedureLogbookType_Procedure)
/// </summary>
public virtual Procedure Procedure1 { get; set; } // FK_ProcedureLogbookType_Procedure
/// <summary>
/// Parent Procedure pointed by [ProcedureLogbookType].([ReportingProcedureId]) (FK_ProcedureLogbookType_ReportingProcedure)
/// </summary>
public virtual Procedure ReportingProcedure { get; set; } // FK_ProcedureLogbookType_ReportingProcedure
我试图通过将以下代码放入 ForeignKeyNames 闭包中来强制它的手:
if (foreignKey.ConstraintName.Equals("FK_ProcedureLogbookType_Procedure"))
{
if (foreignKey.FkTableName.Equals("ProcedureLogbookType"))
{
return "Procedure";
}
}
这给了我一个名为Procedure1的导航属性。
知道问题是什么吗?我希望能够使用如下代码:
procedureLogbook.Procedure == etc
注意:我还尝试了以下代码,因为我注意到关系另一端的 NavigationProperty 也获得了后缀“1”:
if (foreignKey.ConstraintName == "FK_ProcedureLogbookType_Procedure")
{
if(relationship == Relationship.OneToMany)
return "ProcedureLogbookTypes";
return "Procedure";
}
还是没有结果。如何去掉“1”后缀?
除此之外,在我的程序实体中,它没有为导航属性之一(上面引用的ReportingProcedure)获得正确的复数形式。它正在创建以下内容:
public virtual ICollection<ProcedureLogbookType> ReportingProcedure { get; set; }
作为一个集合,它应该是复数。
(交叉发布在 Pluralsight 论坛上,课程代码优先实体框架与遗留数据库)
【问题讨论】:
-
如果您使用最新版本的生成器,您还会遇到同样的问题吗?
-
@SimonHughes 让我试试。我用的是2.33。电流为 2.36。我将不得不再次自定义文件等。注意自我 - 找到跟踪自定义更改的方法。将在一天左右返回结果。谢谢。
-
@SimonHughes 对 2.36 的更新并不顺利。模板运行,但它在我的实体中创建重复的属性。所以该项目不再建设。这个问题的主题不是属性。只是实体中的其他外键。知道为什么它会创建具有相同类型和名称的属性吗?
-
绝对不应该创建重复的属性。您能否通过电子邮件将相关表的 Sql DDL 发送给我,我会看一下。西蒙 [at] hicrest .net
-
@SimonHughes 谢谢西蒙。我会尽快扭转局面。这个项目可能是一个死亡行军,所以可能需要一两天。
标签: entity-framework poco