如何为用户

时间:2016-05-31 08:57:44

标签: c# sql entity-framework code-first

在我的应用程序中,用户可以选择创建3个配置文件。

目前,我在数据库中有3个表来表示配置文件。每个配置文件一个表。

但我不知道如何以正确的方式使用此代码。

假设我输入以下网址访问个人资料:

mysite.com/fishness

要么从数据库中获取属于" fishness"个人资料,我必须搜索三个表。我该怎么做搜索? 我应该为每张桌子做三个查询吗?或者这是一个更好的方法吗?

另一件事是当用户登录时。我应该如何获取属于登录用户的配置文件? 我应该在我的AppUser模型(用户模型)中有导航属性吗?

丑陋的事情在我看来,我必须在我的navigation中为所有三个配置文件添加AppUser属性。

有人可以给我一些关于如何设计这个的提示吗?

这是我的三个个人资料表:

Profile1的:

Id
UserId (the users Id)
Name
CoverPicture
Description
WelcomePage

Profile2的:

Id
UserId (the users Id)
Name
CoverPicture
Description
WelcomePage

Profile3的:

Id
UserId
Firstname
Lastname
Birth
Profilepicture
WelcomePage

3 个答案:

答案 0 :(得分:0)

你的设计并不好,因为它不可扩展,想象你想要创建一个新的配置文件,你将不得不创建新的表并编辑你的代码。

我的建议是创建一个表profileuser,用户有一个 profileId 列,引用个人资料列ID(外键)

Table profile
ProfileID 
ProfileDesignation

Table user
UserId
Firstname
Lastname
Birth
Profilepicture
CoverPicture
Description
WelcomePage
ProfileID references profile.ProfileID

答案 1 :(得分:0)

您的问题似乎是“如何在我的数据库中实现继承”的典型案例。 SO上有几个类似的问题;最好的答案是here

据我了解,您有3种类型的个人资料。它们各自共享一些属性(ID,UserID和WelcomePage),但每种类型可能具有不共享的属性(配置文件1和配置文件2看起来与我相同)。这是一个经典的继承方案。

对于这种情况,关系模型中没有干净的实现;相反,你必须做出权衡。您目前的设计是“每个混凝土表”,非常合理。

答案 2 :(得分:0)

我创建了两个示例表AppUser和UserProfile.Both表与外键AppuserId链接,后者是Appuser的主键。 enter image description here

如果要为用户配置文件创建模型,可以为每个表创建单独的类。当用户基于AppuserId登录时,您可以访问配置文件信息。