控制EF反向POCO生成器中的外键名称

时间:2018-01-29 01:00:41

标签: entity-framework poco

我正在使用Simon Hughes的反向POCO生成器来生成我的域实体。

我有一个ProcedureLogbook表,其中外键回到Procedure表。没什么特别的。只是直接参考回到Pk - m:1。我还与Procedure表有第二关系。第二个关系让我没有悲伤,并按预期命名导航属性,即ReportingProcedure(FK称为FK_ProcedureLogbookType_ReportingProcedure)。

对于其他关系(主要关系),POCO生成器在名为ProcedureLogbook的{​​{1}}类中创建导航属性,而不仅仅是Procedure_ProcedureId。 FK称为Procedure

代码如下所示:

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

注意:我也尝试过以下代码,因为我注意到关系另一端的NavigationProperty也为它添加了“1”后缀:

procedureLogbook.Procedure == etc

仍然没有结果。如何摆脱“1”后缀?

除此之外,在我的Procedure实体中,没有为其中一个导航属性(上面引用的if (foreignKey.ConstraintName == "FK_ProcedureLogbookType_Procedure") { if(relationship == Relationship.OneToMany) return "ProcedureLogbookTypes"; return "Procedure"; } )确定复数。它创建了以下内容:

ReportingProcedure

作为一个集合,它应该是复数。

(Cross在Pluralsight论坛上发布了Code-first Entity Framework with Legacy Databases)

1 个答案:

答案 0 :(得分:0)

在EF.Reverse.POCO.Core.ttinclude中,你可以更新Attempt 5的逻辑(v2.36.1中的第3622行),这样它就不会在循环的第一次迭代中添加后缀

public class NonSmoothViewPager extends ViewPager {

    private boolean mIsEnabledSwipe = true;

    public NonSmoothViewPager(Context context) {
        super(context);
    }

    public NonSmoothViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public void setEnabledSwipe(boolean isEnabledSwipe) {
        mIsEnabledSwipe = isEnabledSwipe;
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        return mIsEnabledSwipe && super.onTouchEvent(event);
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent event) {
        return mIsEnabledSwipe && super.onInterceptTouchEvent(event);

    }

    @Override
    public void setCurrentItem(int item) {
        super.setCurrentItem(item, false);
    }

    @Override
    public void setCurrentItem(int item, boolean smoothScroll) {
        super.setCurrentItem(item, false);
    }
}