【问题标题】:MVC Code First: One-to-many relationship between own model and SimpleMembership userMVC Code First:自己的模型和 SimpleMembership 用户之间的一对多关系
【发布时间】:2013-08-19 11:41:58
【问题描述】:

我目前正在开发一个活动日历网站,但在 ASP.NET 方面我还是个新手。我正在使用 MVC4 框架,以及 MVC4 模板附带的 EntityFramework (CodeFirst) 和 SimpleMembershipProvider。我也在使用迁移 - 如果那是出于任何兴趣。

到目前为止我得到了什么

我目前确实有两个模型,具有一对多的关系,它们工作得很好:

_Events.cs(必须这样命名,因为事件是保留的)

public class _Event
{
    public int _EventId { get; set; }
    public string Name { get; set; }
    public DateTime StartDate { get; set; }
    public DateTime EndDate { get; set; }

    public virtual List<Comment> comments { get; set; }
}

Comment.cs

public class Comment
{
    public int CommentId { get; set; }
    public string Text { get; set; }

    public int _EventId { get; set; }
    public virtual _Event _Event { get; set; }
}

问题

现在,我想在 Membership 模型中添加另一个 Comment 和 User 之间的一对多关系,但似乎不知道如何去做。

我想要归档的目标是,我可以为每个事件创建一个评论列表,并打印出每个评论的用户信息。我尝试了几件事,但还不能让它工作。我的最后一次尝试是这样的:

public class Comment
{
    // snip - see above

    public virtual UserProfile User { get; set; }
}

非常感谢您提前提供的任何帮助。

【问题讨论】:

  • 如果是这种情况,您是否还需要将UserId 存储在评论中?此外,_Event 并不是一个很好的类名,我会考虑将其更改为更具体的名称。
  • SimpleMembership 仅绑定到现有模型,不会为您创建表。因此,像往常一样创建您的UserProfile(使用关系),然后确保它使用IdUserName 列绑定到Table
  • 您是否在项目中使用来自 Microsoft 的默认会员提供程序?如果是,由于模型之间存在关系,您需要为您的项目实现成员资格提供程序。 Microsoft 成员资格表将存储在不同的位置,您无法在它们之间导航。您使用 _EventId 的目的是什么?
  • @James 我知道,其实我现在用的是德语名字,_Event 只是我在这里发帖之前所做的翻译。
  • @AmirHossein Mehrvarzi 是的,我使用的是默认会员服务提供商

标签: c# asp.net asp.net-mvc entity-framework simplemembership


【解决方案1】:

您的评论中需要有 UserId。

public class Comment
{
    // snip - see above

    public int UserId {get; set;}
    public virtual UserProfile User { get; set; }
}

您还需要设置您的评论和您的用户之间的关系,以便在您的帐户控制器中设置类似的内容。

public class UserProfile
    {
        [Key]
        [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
        public int UserId { get; set; }
        public string UserName { get; set; }
        public virtual ICollection<Comment> Comments { get; set; }
    }

【讨论】:

  • 谢谢,这有帮助。还要感谢@Brad Christie 提供了一个非常相似的解决方案。在旁注中,我必须将 [InitializeSimpleMembership] 添加到我的控制器中,以使其全部正常工作。
【解决方案2】:

在 ASP.net MVC 项目中,如果您想使用默认的 Microsoft Membership Provider,注意您需要实现像角色提供者这样的会员系统,以便在您创建的模型之间建立关系和导航以及更多功能主义者和会员制度。 Microsoft 将用户相关信息存储在项目中的单独位置(如 App_Data 文件夹中的数据库)。

因此您需要将其他模型存储到 Microsoft 存储位置,直接使用 Microsoft 函数并为此设置连接字符串 实现 Microsoft Membership 以将用户信息存储在相关数据库中,例如 NUGET Package在 C# 中实现 codefirst 成员资格提供程序。您可以安装此软件包并学习编写自己的会员提供程序。更多帮助将通过搜索“MVC 的自定义成员资格提供程序或 aspnet 成员资格提供程序”找到。

【讨论】:

  • 感谢您提供此解决方案。我肯定会再次仔细研究一下。现在@Xaxum 的解决方案成功了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-19
相关资源
最近更新 更多