使用EF Code First来键入用户ID上的表/数据库

时间:2014-07-16 17:25:42

标签: c# asp.net-mvc entity-framework

我需要设置一个用户首选项表,可以由用户在MVC视图中进行编辑。首选项主要由下拉列表选择。会有几十个偏好。我首先使用EF代码和MVC5。

举个例子。假设有一个包含可用首选项的主表。

ShirtColor     Blue
ShirtColor     Red
PantColor      Black
PantColor      Blue
SockColor      White
SockColor      Brown

然后,当用户编辑他们的首选项时,会看到一系列下拉菜单,允许他们更改自己的偏好设置:

Shirt Color:   Blue    <--- Dropdown w/options Blue, Red. Current setting selected.
Pant Color:    Black   <--- Dropdown w/options Black, Blue. Current setting selected.
Sock Color:    White   <--- Dropdown w/options White, Brown. Current setting selected.

用户的首选项将用作默认值,应用于站点其他部分中的产品选择。需要保存所有用户的产品选择,这可能会导致每个用户1000行的历史记录。

我关心的是数据库设计。知道EF不能轻松处理跨数据库查询,并且知道这些表需要键入用户ID,任何人都可以指导我使用EF代码首先找到关于数据库设计的良好解决方案吗?

在单个数据库中创建所有必需的表是否存在性能考虑因素?或者我应该将这些表中的一些表隔离在两个数据库中?如果是后者,我如何按用户ID键入此数据?

上面的示例场景大大简化了我的要求。实际数据用于度量单位首选项,但它说明了这个想法 - 一个主要的首选项表,其中包含每个用户可以在其用户配置文件中指定的定义。我最大的困惑/担心是如何首先使用EF代码来使用用户ID来跟踪这些数据。

1 个答案:

答案 0 :(得分:1)

  

需要保存所有用户的产品选择,这可能会导致每位用户有1000行的历史记录。

您不必将每个用户的设置存储在一行中。您可能只需要两列。第一列是用户ID,第二列是格式化值的用户设置(可以是json)。

User Id   Setting
A         {"ShirtColor": "Blue", "PantColor" : "Black", "SockColor" : "Brown"}
B         {"ShirtColor": "Red", "PantColor" : "Black", "SockColor" : "White"}
C         {"ShirtColor": "Blue", "PantColor" : "Blue", "SockColor" : "White"}
  

了解EF无法轻松处理跨数据库查询

我想知道,哪个ORM可以轻松提供跨数据库查询?

  

在单个数据库中创建所有必需的表是否存在性能考虑因素?或者我应该分开一些   这些表跨2个数据库?如果是后者,我该如何键入这些数据   按用户ID?

上面的解决方案我认为已经足够了,除非有很多,我的意思是,很多设置,然后你需要找到正确的列类型,varchar或varbinary(你需要保存/读取数据)作为字节,你也可以压缩数据以获得更紧凑的数据。)

  

我最大的疑惑是我如何首先使用EF代码来使用用户ID来跟踪这些数据。

只需使用正常的外键概念。