需要长篇解释的快速问题..
假设我有两个表 - 一个是项目表(比如“用户”),另一个是定义表 - 比如“自定义属性”。系统中的许多不同项目(“用户”,“文章”,“帖子”等)都可以为其定义自定义属性,并且这些项目存储在“自定义属性”表中。因此,例如,“自定义属性”表格如下所示:
CREATE TABLE [CUSTOMPROP_DEFINITION] (
[ITEM_TYPE] INTEGER NOT NULL,
[POSITION] INTEGER NOT NULL,
[NAME] NVARCHAR(MAX) NOT NULL
)
简单的小桌子。每个项目都有一个'item_type'标识(例如,用户是项目类型为1.文章的项目类型为2,依此类推),因此该表格可以为每个项目设置多行。基本上,这个表的其他表的元数据。
我想在我的Users表上创建一个导航属性,它将链接到props表中'item_type'== 1的所有条目。
最好的解决方法是什么?从我看来,有两种选择 - (1)通过EDMX创建导航属性并让它自动填充。 (这是首选,但实施麻烦......)或
(2)在分部类中创建属性,并手动加载所有内容。
#2的问题是它(可能会?)比实体框架处理加载慢。 #1的问题是......无论我尝试什么,我都无法定义将处理它的NavigationProperty。因为主键是一个固定的数字 - 即所有用户总是'1',所有文章等等总是'2'。 - 我一直找不到挂钩的方式。
思考? --Mike。
答案 0 :(得分:1)
根据EF定义为导航属性的内容,您所描述的并不是真正的“导航属性”。 EF术语中的导航属性遵循[通常]主键 - 数据库模式本身中的外键引用。并且,AFAIK,在EDMX中获得该导航属性的唯一方法是实际上涉及到FK。
你可以,显然(也可能)在这里有一个FK,但这并不完全是你想要的,因为FK将返回给定主键的自定义属性的所有实例 。你想要的只是特定类型的实例;我不认为在EF中有这种“现成”的方式。
您可能想要做的是实施存储过程,并将其带入您的模型;然后,您可以在您的实体上实现此属性(或者可能更合适的方法)。
或者,您可以创建FK,让实体加载所有自定义属性,然后编写“辅助属性”,执行简单的基于LINQ的.Where()
过滤器。