实体框架为没有数据库密钥的依赖列指定字符串

时间:2010-01-11 19:41:56

标签: .net entity-framework

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

假设我有一个Document对象,它可以有不同的批准阶段和类别。我的表可能看起来像

  

DocumentID,DocumentName,DocumentState,DocumentCategory

使用以下文档数据:

  

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

     

2,另一个Doc,2,1,

我在数据库中有一个Key / lookup表,表格可能如下:

  

LookupKey,LookupValue,LookupText

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

  

DocumentStatus,0,Draft

     

DocumentStatus,1,InReview

     

DocumentStatus,2,Final

     

DocumentCategory,0,Resume

     

DocumentCategory,1,求职信

表格基于以下两种关系:

  

DocumentStatus = LookupValue和LookupKey =“DocumentStatus”

第二关系

  

DocumentCategory = LookupValue和LookupKey =“DocumentCategory”

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

1 个答案:

答案 0 :(得分:0)

好吧,如果我在你的鞋子里,我会将查找表的主键更改为lookupKey和LookupValue上的复合键。但是我们假设你无法改变数据库的结构。

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