使用另外两个层扩展成员配置文件 - asp.net mvc

时间:2009-04-25 08:22:02

标签: asp.net-mvc

我有一个与个人资料相关的建模问题。首先,我研究了如何使用SQLTableProvider并使用内置的分析系统,但感觉不适合。因此,有了这个说法,我有一个会员计划,每个人都有个人资料,然后该人可以将他们的个人资料升级为个人(其他字段)或公司帐户(再次添加其他字段)。

所以我想,使用Profile基类然后继承公司帐户和个人帐户。然而,当谈到在MVC中实现这一点时,我正在碰壁砖。

由于公司或个人编辑页面都有效地更新了基本个人资料表以及同一页面中的个人/公司表。我将如何在模型中实现此功能(目前通过LinqToSQL生成)以及视图级别?

道歉,如果不是很清楚,很难解释!

2 个答案:

答案 0 :(得分:2)

如果您使用Linq to SQL,那么您已经拥有了一个模型。 Linq会根据您的数据库为您生成实体和集合。生成的模型很浅,但非常可靠且可行。 Linq to SQL模型可以通过部分类进行扩展,允许您增强实体或上下文本身以获得其他功能。

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

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

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

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

答案 1 :(得分:0)

您的意思是设置选择在每个页面上查看的项目数量,以及选择一些样式表吗?

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

除非用户为自己选择了其他值,否则公司会选择一些适用于用户的值。那是你的想法吗?


在这种情况下:我不知道如何在ASP.NET Profile中一起完成,但是数据库中的以下表如何:

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
)

然后为当前用户进行一些连接。如果未给出用户设置,请采取公司设置;如果未给出公司设置,请采用默认值。