Entity framework 4 实体框架-创建查找NavigationProperty

Entity framework 4 实体框架-创建查找NavigationProperty,entity-framework-4,Entity Framework 4,需要详细解释的快速问题 假设我有两个表,一个是项目表(比如“用户”),另一个是定义表,比如“自定义属性”。系统中的许多不同项目(“用户”、“文章”、“帖子”等)都可以为其定义自定义属性,这些项目存储在“自定义属性”表中。例如,“自定义属性”表如下所示: CREATE TABLE [CUSTOMPROP_DEFINITION] ( [ITEM_TYPE] INTEGER NOT NULL, [POSITION] INTEGER NOT NULL, [NAME] NVARCH

需要详细解释的快速问题

假设我有两个表,一个是项目表(比如“用户”),另一个是定义表,比如“自定义属性”。系统中的许多不同项目(“用户”、“文章”、“帖子”等)都可以为其定义自定义属性,这些项目存储在“自定义属性”表中。例如,“自定义属性”表如下所示:

CREATE TABLE [CUSTOMPROP_DEFINITION] (
    [ITEM_TYPE] INTEGER NOT NULL,
    [POSITION] INTEGER NOT NULL,
    [NAME] NVARCHAR(MAX) NOT NULL
)
简单的小桌子。每个项目都有一个“item_type”id(例如,用户的项目类型为1。项目的项目类型为2,依此类推),因此此表可以为每个项目包含多行。本质上,此表是其他表的元数据

我想在我的用户表上创建一个导航属性,该属性将链接到props表中的所有条目,其中'item_type'==1

最好的办法是什么?在我看来,有两种选择: (1) 通过EDMX创建导航属性并让其自动填充。(这是首选,但在实施过程中遇到困难)或

(2) 在分部类中创建属性,并手动加载所有内容

#2的问题是它(可能?)比实体框架处理加载要慢。 #1的问题是。。无论我尝试什么,我都无法定义一个NavigationProperty来处理它。因为主键是一个固定的数字,即所有用户的主键总是“1”,所有文章的主键总是“2”,等等我还没能找到一个方法来解决这个问题

想法?
--Mike.

根据EF定义的导航属性,您所描述的并不是真正的“导航属性”。EF术语中的导航属性遵循数据库模式本身中的[通常]主键-外键引用。而且,顺便说一句,在EDMX中获得导航属性的唯一方法是实际使用FK

显然,您可以(而且可能确实)在这里使用FK,但这并不完全是您想要的,因为FK将返回给定主键的自定义属性的所有实例。您需要的只是特定类型的实例;我不认为在EF中有一种“现成”的方法可以做到这一点

您可能想做的是实现一个存储过程,并将其引入到您的模型中;然后,您可以在实体上实现这是一个属性(或者更恰当地说是一个方法)


或者,您可以创建FK,让实体加载所有自定义属性,然后编写“帮助器属性”,执行简单的基于LINQ的
。Where()
过滤器。

看起来您的CustomProp表在修改用户概念时并没有修改特定用户?也就是说,在这个表中,userid1的值不会与userid14的值不同吗?还是我误解了你的意图?@MikeB-没错。表更多的是元数据信息,它不仅可以保存关于用户的元数据,还可以保存帖子、文章等。