实体框架4.0,PoCo&查找表的导航属性

时间:2011-02-14 23:07:44

标签: entity-framework-4 poco

我有以下型号

DeltaDirectionType,
int Id
string Name


Delta,
int Id 
string Name 
DeltaDirectionType DeltaDirectionType
Double Value

Trade
int Id
DateTime BusinessDate
IList<Delta> deltas

所以DeltaDirectionType是一个查找表,Trade拥有Deltas的集合

在数据库中,它实现如下

DeltaDirectionTypes
Id int
Name varchar(max)

Deltas
Id int
Name varchar(max)
DeltaDirectionType_Id int
Trade_Id int
Value float

Trades
Id int
BusinessDate DateTime
Delta_Id int

当我从Edmx文件的代码生成模型时,(取消检查外键),因为我的模型没有这些属性。我遇到了导航属性的问题。 nHibernate中的这样的东西对于DeltaDirectionType和Delta来说是一个简单的一对多映射,对于Delta和Trades来说是多对多,但是,我如何首先让它识别DeltaDirectionType是一个查找,然后让Icollection工作为我

我正在努力解决这个问题,实体框架并不能让您轻松实现。我已经尝试过一般,删除EF为你输入的导航属性,但是你会得到一些映射片段错误,未映射的属性等。

请帮助或指出正确的方向。

查找表是现实生活中的问题,不确定为什么用EF来实现它是如此困难。

任何帮助非常感谢

由于

2 个答案:

答案 0 :(得分:1)

您必须在模型中创建外键或导航属性才能导航关系。

导航属性可以定义为单向,即从增量表到查找表。像这样的单向导航会将相应的属性添加到delta的对象,但不会添加到looup表

答案 1 :(得分:0)

您通过查找实际意味着什么?除了Delta实体将直接映射DeltaDirectionType_Name吗?

在EF中,您将获得DeltaDirectionType的导航属性,您可以通过此导航属性访问该名称。如果您不喜欢它,您可以将新属性添加到生成的POCO的部分类中,并直接在Delta实体中提供名称,如:

public string DeltaDirectionTypeName
{
  get
  {
    return DeltaDirectionType != null? DeltaDirectionType.Name : String.Empty;
  }
}

唯一的问题是您无法在Linq-To-Entities查询中使用此属性。在查询中,您始终必须使用导航属性。