我有以下型号
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来实现它是如此困难。
任何帮助非常感谢
由于
答案 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查询中使用此属性。在查询中,您始终必须使用导航属性。