获取导航属性的前1位并用作标量属性

时间:2014-05-16 14:38:14

标签: entity-framework code-first

我们有一个非常丑陋的数据库,大约有450个表,至少有很多视图,还有很多存储过程,此外我们还会做一堆内联sql转换,这会增加数据库的复杂性。客户端表示不允许更改数据库模式。为了降低开发团队的复杂性,我们尝试使用EF Code First到现有数据库,遵循存储库和工作单元模式,清理数据模型并隐藏丑陋的映射,实体拆分和表拆分。有几个实例只有'当前'导航属性很重要,我想获得它的ID并将其用作类中的标量属性。

这样的事情:

声明与声明状态具有一对多关系,但只有一种状态是当前状态。状态具有其他相关属性 我想获取当前的声明状态ID并将其用作声明实体的标量属性。然后,开发人员可以将其用作FK,以便在必要时重新查询,而不是对数据库视图有大量的导航属性。

public class Case
    {
    [Key]
    public int intCaseID { get; set; } // ingCaseID (Primary key)
    public int? intBatchID { get; set; } // intBatchID
    [NotMapped]
    public int intCurrentCaseStatusID {

        get
        { 

            // return the top (1) ID from case status for this claim filtered by any other fields necessary
        }
        set; }

    // Reverse navigation
    public virtual ICollection<CaseStatus> CaseStatus { get; set; } //CaseStatus.FK_CaseStatus_Case

这可能吗?有人能指出我正确的方向吗?这对清理我们的模型有很长的路要走。这是一个相当简单的例子,因为我们的一些数据库视图和存储过程在连接和where子句中做了很多。我甚至没有提出正确的搜索条件来研究这个问题。

请对你的回答温和。这是我第一次向这样的论坛发帖提问。 :-) 感谢您的任何帮助,您可以提供。

更新:我能够执行linq以查询casestatuses的集合,但这只有在我使用repo的AllIncluding时才有效。任何其他东西,它会抛出一个null异常,因为CaseStatus是空的(当然)。这不是一个好的解决方案,因为计划是对一堆导航属性执行此操作。无论如何将单个属性链接到存储过程而不实际将proc作为实体引入?

1 个答案:

答案 0 :(得分:0)

欢迎使用Stack Overflow!

看看这是否有帮助

[NotMapped]
public int intCurrentCaseStatusID {

    get
    { 
        var currentCaseStatus CaseStatus.OrderByDescending(c=>c.CreatedDate).FirstOrDefault();
        if (currentCaseStatus == null) return default(int);

        return currentCaseStatus.CaseStatusId;
    }
}