2009-04-25 127 views
1

我有一个与配置文件相关的建模问题。首先,我研究了使用SQLTableProvider并使用内置的分析系统,但并不觉得它们合适。所以,据说,我有一个会员制度,每个人都有个人资料,那么这个人可以将他们的个人资料升级到个人(附加领域)或公司帐户(再次提供额外的领域)。扩展与另外两层的成员配置文件 - asp.net mvc

所以我想,使用一个配置文件基类,然后继承公司帐户和个人帐户。但是,当涉及到在MVC中实现这个功能时,我遇到了一堵砖墙。

由于公司或个人编辑页面正在有效更新基本配置文件表以及同一页面中的个人/公司表。我将如何去实现这个模型(目前通过LinqToSQL生成)以及视图级别?

道歉,如果这不是很清楚,棘手的解释!

回答

2

如果你使用Linq to SQL,那么你已经有了一个模型。 Linq根据您的数据库为您生成实体和集合。生成的模型是浅层模型,但非常稳固可行。 Linq to SQL模型可以通过部分类进行扩展,使您可以增强实体或上下文本身以获得更多功能。

控制器可以直接针对生成的模型工作,并根据需要将实体或实体集合传递给视图。

我建议,对于您似乎正在尝试做的事情,您可能会考虑不使用内置配置文件提供程序系统。 asp.net中的配置文件提供程序适用于简单的个性化内容,但对于联系信息等具体数据并不适用。另外请记住,配置文件提供程序系统倾向于将对象数据作为序列化字符串存储在数据库中......这使得从管理工具等获取配置文件数据非常困难。在任何情况下,如果需要多个用户的配置文件信息(例如使用管理员用户编辑器),性能开始变得非常快。

对于当您存储重要个人资料(如您提到的内容)时,您实际存储的是“帐户详细信息”而不是“用户配置文件”。您可以扩展成员资格提供程序以公开您的其他详细信息,但我通常发现,只需推出自己的数据模型和访问逻辑以处理额外的帐户信息就容易多了。

我的经验法则是这样的:如果在用户对数据所属的请求期间只需要该信息,那么它就进入配置文件。如果我需要一个用户的数据在另一个用户的请求期间被读取,或者如果我需要不同用户的数据“列表”,那么它不会在asp.net配置文件中。

+0

感谢Stephen的投入。我确实反对使用内置配置文件,因为您提到的原因非常好,以至于我知道我在那里的正确轨道上。 更多地思考它,我认为我的主要问题是围绕从一个视图/控制器动作更新两个表/模型,但我很肯定我现在已经有了前进的方向。 – Steve 2009-04-26 07:25:08

0

你是指像选择在每个页面上查看多少项目以及选择一些样式表之类的设置?

public class Profile 
{ 
    int? ItemsPerPage { get; set; } 
    string PreferredStyleSheet { get; set; } 
} 

该公司选择一些值将为用户工作,除非用户为他们自己选择了其他值。这是你的想法吗?


在这种情况下,我不知道该怎么做起来的ASP.NET配置文件,但如何在数据库中的以下表:

TABLE Setting 
(
    SettingID int NOT NULL, 
    SettingName varchar(32) NOT NULL, 
    DefaultValue nvarchar(128) NULL 
) 
TABLE CompanySetting 
(
    CompanySettingID int NOT NULL, 
    RefSettingID int NOT NULL, 
    RefCompanyID int NOT NULL, 
    SettingValue nvarchar(128) NOT NULL 
) 
TABLE UserSetting 
(
    UserSettingID int NOT NULL, 
    RefSettingID int NOT NULL, 
    RefUserId uniqueidentifier NOT NULL, 
    SettingValue nvarchar(128) NOT NULL 
) 

然后做一些加入了当前用户。如果没有给出用户设置,请进行公司设置;如果未提供公司设置,则采用默认值。

+0

谢谢奥莱,但不是真的我以后。每种不同类型的个人资料的详细信息都是地址细节,工作经验等类型的东西。 我已经把数据库建模得很好,它承载了MVC,我遇到了麻烦。如何在模型层上表示表结构并在视图中显示它们。 更有意义吗? – Steve 2009-04-25 16:02:20