代码之家  ›  专栏  ›  技术社区  ›  Jay

实体框架为不带数据库键的从属列指定字符串

  •  0
  • Jay  · 技术社区  · 15 年前

    在EF中,当数据库中没有定义关系,并且其中一个相关列是特定的字符串/硬编码值时,是否有方法指定两个表之间的关系?

    假设我有一个文档对象,它可以有不同的审批阶段和类别。我的桌子可能看起来像

    文档ID、文档名称、文档状态、文档类别

    包含以下文档数据:

    1,一些测试文档,0,0

    2,另一个文件,2,1

    我在数据库中有一个键/查找表,该表可能如下所示:

    查找键、查找值、查找文本

    使用以下数据,其中lookupkey和lookupvalue是主键(未在数据库中定义):

    文档状态,0,草稿

    文档状态,1,在视图中

    文件状态,2,最终

    文档类别,0,继续

    文件类别,1,附信

    表有两种关系,基于:

    documentstatus=lookupvalue and lookupkey=“文档状态”

    还有第二种关系

    documentCategory=LookupValue和LookupKey=“documentCategory”

    我可以在EDMX中定义这种类型的关系吗?

    1 回复  |  直到 15 年前
        1
  •  0
  •   Craig Stuntz    15 年前

    好吧,如果我是你的话,我会把查找表的主键更改为lookup key和lookupvalue上的复合键。但我们假设您无法更改数据库的结构。

    是的,你可以这样做。本质上,您将以这样的方式编辑EDMX的ssdl部分:如果您有一个实际的外键,它将与GUI设计器生成的内容相同。实现这一点的一种方法是查看基于真实的、复合的外键的关联,并将该结构简单地输入到EDMX中。但是,手工操作有一个缺点。当您在GUI设计器中选择“从数据库更新模型”时,它将每次替换完整的SSDL部分。这将清除您的更改。因此,这样做的一个更简单的方法是拥有一个单独的数据库,在查找值表中有一个复合主键的实外键,用于生成模型。这些独立的数据库与运行时数据库的结构相同,只是它“更正确地”定义了这一点模式。您只需在从数据库更新模型之前更改连接字符串,生成模型,然后将连接字符串更改回运行时的“真实”数据库。