如何为ASP MVC4中的每个注册用户创建一个空白数据库?

时间:2013-05-24 11:07:57

标签: c# asp.net-mvc database authentication

如何为每个注册用户创建一个空白数据库,或者它已经在ASP MVC4中实现了?他们会有不同的数据库吗?例如,在存储联系人的应用程序中,我希望不同的用户可以创建自己的联系人列表。

如果我有ContactsController,我只想编辑注册用户,我应该写这样的东西吗?

[Authorize]
public class ContactsController : Controller

修改 感谢Bhushan,我不知道User ID会存储不同的数据。在Contact表中我有ContactId,它与联系人数据相关并且有一个主键,我应该在同一个Contact表中添加例如UserId将它与注册用户ID相关联? UserId应该有主键吗?

3 个答案:

答案 0 :(得分:4)

如果我理解你的问题:

  

不同的用户可以创建自己的联系人列表

上述任务不需要单独的数据库,您可以通过在Contacts表中添加字段Users或类似名称来将ContactOwnerContact相关联User ID

因此,您的联系人表格如下所示:(表名称:联系人)

|ContactID       | ContactType | ContactName | ContactOwner |

|0123456789      | MOBILE      | Mr. ABC     | USER1        |
|email@email.com | EMAIL       | Mr. ABC     | USER1        |
|0123456789      | MOBILE      | Mr. PQR     | USER1        |
|0123456789      | MOBILE      | Mr. XYZ     | USER1        |
|0123456789      | MOBILE      | Mr. LMN     | USER2        |
|0123456789      | MOBILE      | Mr. AAA     | USER3        |

因为您可以看到上面的示例表,您可以确定哪个ContactID属于哪个User?或者User创建的联系人是哪个? 在这种情况下,您必须使用其他主键创建ContactOwner主键(复合键),以确保一个联系人可以由多个用户拥有/创建。

更新1

要获取特定用户创建的联系人,您可以编写如下查询:

Select * from CONTACTS where ContactOwner = 'USER1'

以上查询将为您提供USER1创建/拥有的联系人,而不是其他用户创建的联系人。所以你的结果将使用上面的查询包含以下记录:

|ContactID       | ContactType | ContactName | ContactOwner |

|0123456789      | MOBILE      | Mr. ABC     | USER1        |
|email@email.com | EMAIL       | Mr. ABC     | USER1        |
|0123456789      | MOBILE      | Mr. PQR     | USER1        |
|0123456789      | MOBILE      | Mr. XYZ     | USER1        |

更新2

您的查询将是一个动态查询,ContactOwner将成为USER登录的人。ThisThis可能会帮助您编写动态查询(已准备好声明)[注意:因为我是Java开发人员所以我不知道C#中用于编写动态查询的合适语法。]

答案 1 :(得分:4)

如果您希望每个用户都有一个空数据库,只需在注册过程中添加一部分即可创建新数据库。您可以使用SQL语句轻松完成此操作(CRATE DATABASE,然后是CREATE TABLE和其他create语句来创建模式)。您也可以使用SMO复制现有的模板数据库。您也可以使用实体框架数据库优先创建它(只需很少的调整,比如修改连接字符串)。但是,所有这些选项都不建议用于您的方案

如果您想为每个用户提供他的联系人列表,只需添加到“联系人”表“OwnerUserID”列或类似名称,这将与您的用户表具有FK关系,并将包括此行的用户属于。在您的查询中,只需按此过滤并向每个用户显示他自己的联系人列表。

通过这种方式,您可以更轻松地管理事物并在将来添加/修改内容。此外,与您在问题中提到的多个数据库一起工作会给您带来很多痛苦,几乎没有任何好处(在大多数情况下)。

祝你好运。

答案 2 :(得分:0)

仅供参考,例如: SQL Server 2012,最大数据库数为32,767。

请不要为每个用户创建一个新的数据库,它首先违反了基本逻辑和关系数据库的要点。使用表和外键以及诸如此类的东西。