如何在ASP MVC4中为每个注册用户创建一个空白数据库
本文关键字:创建 一个 数据库 空白 用户 注册 MVC4 ASP | 更新日期: 2023-09-27 18:15:14
如何为每个注册用户创建空白数据库,或者它已经在ASP MVC4中实现?他们会有不同的数据库吗?例如,在一个存储联系人的应用程序中,我希望不同的用户可以创建他们自己的联系人列表。
如果我有ContactsController
,我只想编辑注册用户,我应该写这样的东西吗?
[Authorize]
public class ContactsController : Controller
编辑谢谢Bhushan,我不知道User ID会存储不同的数据。在Contact表中,我有一个与联系人数据相关联的ContactId,它有一个主键,我是否应该在同一个Contact表中添加例如UserId以将其与注册用户ID相关联?UserId应该有主键吗?
如果我没理解错你的问题:
不同的用户可以创建自己的联系人列表
上述任务不需要单独的数据库,您可以通过在Contact
表中添加ContactOwner
或类似名称的字段来关联Contacts
和Users
,该表将存储User ID
。
所以你的联系人表可以像下面这样:(table NAME: contacts)
|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
主键(复合键)与其他主键(s),以确保一个联系人可以由多个用户拥有/创建。
更新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
。这和这可能有助于您编写动态查询(准备好的语句)[注意:因为我是Java
开发人员,所以我不知道C#
中适合编写动态查询的语法。]
如果您希望每个用户都有一个空的DB,只需在创建新数据库的注册过程中添加即可。您可以使用SQL语句(CRATE DATABASE,然后是CREATE TABLE和其他创建语句来创建您的模式)轻松地做到这一点。您也可以使用SMO来复制现有的模板数据库。您也可以使用实体框架数据库优先创建它(只需稍作调整,例如修改连接字符串)。但是,所有这些选项不建议用于您的场景。
如果你想给每个用户他的联系人列表,只需在"联系人"表中添加"OwnerUserID"列,或者类似的东西,这将与你的用户表有FK关系,并且将包括这一行所属的用户。在您的查询中,只需按此过滤并显示每个用户自己的联系人列表。
这样以后管理和添加/修改东西会容易得多。此外,像你在问题中所问的那样处理多个数据库会给你带来很多痛苦,几乎没有任何好处(在大多数情况下)。
祝你好运。供参考,以SQL Server 2012为例,数据库的最大数量是32,767。
请不要为每个用户创建一个新的数据库,它违背了基本的逻辑和建立关系数据库的初衷。使用表、外键等