如何在 ASP .NET MVC 中将对象列表与用户(帐户)关联

2024-03-03

我想为我的应用程序的每个用户存储一个对象列表。

我想添加一个List of Meeting每个用户的对象。当然,我想使其与实体框架一起工作

public class Meeting{
    int Id {get;set;}
    Person Person {get;set;}//Meeting with person
    DateTime DateTime{get;set;}
}

问题:我应该添加这个到那个吗AccountModels.cs?我应该将其添加到该文件中的什么位置?是否应该只是会议ID?或者也许我需要它们之间的关联类?

我发布的内容AccountModels.cs文件如下。

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity;
using System.Globalization;
using System.Web.Security;

namespace OdeToFood.Models
{
    public class RegisterExternalLoginModel
    {
        [Required]
        [Display(Name = "User name")]
        public string UserName { get; set; }

        public string ExternalLoginData { get; set; }
    }

    public class LocalPasswordModel
    {
        [Required]
        [DataType(DataType.Password)]
        [Display(Name = "Current password")]
        public string OldPassword { get; set; }

        [Required]
        [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
        [DataType(DataType.Password)]
        [Display(Name = "New password")]
        public string NewPassword { get; set; }

        [DataType(DataType.Password)]
        [Display(Name = "Confirm new password")]
        [Compare("NewPassword", ErrorMessage = "The new password and confirmation password do not match.")]
        public string ConfirmPassword { get; set; }
    }

    public class LoginModel
    {
        [Required]
        [Display(Name = "User name")]
        public string UserName { get; set; }

        [Required]
        [DataType(DataType.Password)]
        [Display(Name = "Password")]
        public string Password { get; set; }

        [Display(Name = "Remember me?")]
        public bool RememberMe { get; set; }
    }

    public class RegisterModel
    {
        [Required]
        [Display(Name = "User name")]
        public string UserName { get; set; }

        [Required]
        [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
        [DataType(DataType.Password)]
        [Display(Name = "Password")]
        public string Password { get; set; }

        [DataType(DataType.Password)]
        [Display(Name = "Confirm password")]
        [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
        public string ConfirmPassword { get; set; }
    }

    public class ExternalLogin
    {
        public string Provider { get; set; }
        public string ProviderDisplayName { get; set; }
        public string ProviderUserId { get; set; }
    }
}

我真的希望 Microsoft 能够对其默认的 MVC 项目模板进行一些改进,以更好地阐明正确的 MVC 开发,但这似乎没有发生。

一般来说,每个类需要一个文件。这没有技术原因,但它使代码的使用变得更加容易。例如,您的Meeting类将在Meeting.cs文件,然后您就不必想知道它在哪里。您知道要查找同名文件。

Then, AccountModels.cs实际上主要包含查看模型(仅查看​​ MVC5 中的模型,实际上,我确实注意到 Microsoft 通过命名文件在 MVC5 中改进了这一点AccountViewModels.cs)。 “模型”一词在 ASP.NET MVC 中的使用相当宽松。您的实体框架支持的类(或 POCO)实际上是所谓的“实体”(因此称为“实体框架”),实体基本上只是一个 DTO 或数据传输对象,并不真正适合用作model。视图模型是用于表示视图的某些功能的类。就表单而言,通常最终会成为正在创建或更新的实体的传真,但在大多数情况下,它们的影响范围可能更远,并且具有比适当添加到实体更多的业务逻辑。

在 MVC5 之前的默认项目模板中,您唯一的“实体”是UserProfile。我住在同一个地方AccountModels.cs文件以及应用程序的默认上下文,UsersContext。将此文件中的每个类拆分为它们自己的文件会更合适:UserProfile.cs, UsersContext.cs, etc.

在 MVC5 中,您唯一的实体是ApplicationUser,这再次处于不利地位IdentityModels.cs,该文件还包含为您的应用程序默认生成的上下文。如果把它们分成几部分就更好了ApplicationUser.cs and ApplicationDbContext.cs files.

无论如何,典型的布局是同时具有Models目录和一个ViewModels目录。实体进入Models目录(主要不符合惯例,因为同样,它们并不是真正合适的“模型”)并且显然视图模型位于ViewModels目录。如果这是一个简单的项目,我通常会将上下文移到根目录中,或者如果我将拥有多个上下文(连接到多个数据库),则仅为上下文创建一个单独的目录。

再次强调,这都是可选的。事实上,您可以做任何您想做的事情,但是遵循其中一些事情可以使您的项目的工作和维护变得更加简单,也使其他开发人员更容易从您离开的地方继续。

UPDATE

这并没有真正回答你的问题之一,这似乎是关于你应该如何关联Meeting与你的“用户”类(UserProfile/ApplicationUser取决于您的 MVC 工作版本)。

第一步始终是确定两件事之间关系的本质。是一对一的吗?一对多?多对多?我不能代表你的申请,但是Meeting seems就像它应该是多对多一样:一个用户可以召开许多会议,而一个会议可以包括许多用户。在这种情况下,您只需在两侧设置一个集合:

用户配置文件/应用程序用户

public virtual ICollection<Meeting> Meetings { get; set; }

Meeting

public virtual ICollection<UserProfile> Attendees { get; set; }

Or

public virtual ICollection<ApplicationUser> Attendees { get; set; }

这足以向实体框架传达这是一个多对多关系,并且它将在幕后自动创建一个中间表来跟踪该关系。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 ASP .NET MVC 中将对象列表与用户(帐户)关联 的相关文章

  • 平滑滚动.net 表单

    您好 我正在 net 中使用表单 并且在运行时动态添加大量链接标签 我将这些链接标签添加到面板并将该面板添加到 winform 当链接标签的数量增加时 表单会显示一个自动滚动条 垂直 现在 当我使用自动滚动向下滚动时 表单在滚动时不会更新其
  • 如何在 SqlDataReader.Read() 期间从死锁异常中恢复

    我的 NET 应用程序的事件日志显示 它在从 Sql Server 读取数据时偶尔会出现死锁 这种情况通常非常罕见 因为我们已经优化了查询以避免死锁 但有时仍然会发生 过去 我们在调用ExecuteReader函数在我们的SqlComman
  • MVC5 实体框架的问题

    我在我的 Web 应用程序中使用 Visual Studio 2013 中的 ASP NET MVC5 Entity Framework 6 我正在尝试我的模型工作 但由于某种原因而出现错误 我已经尝试过 Fluent API 和它自己的模
  • 为什么这个没有特殊字符的正则表达式会匹配更长的字符串?

    我正在使用此方法来尝试查找匹配项 例如 Regex Match A2 TS OIL TS OIL RegexOptions IgnoreCase Success 我得到了真实的结果 我很困惑 我认为这应该返回 false 因为模式中没有特殊
  • ASP.Net Core 内容配置附件/内联

    我正在从 WebAPI 控制器返回一个文件 Content Disposition 标头值自动设置为 附件 例如 处置 附件 文件名 30956 pdf 文件名 UTF 8 30956 pdf 当它设置为附件时 浏览器将要求保存文件而不是打
  • 如何在 C# 控制台应用程序中将修饰符(ctrl、alt、shift)按键捕获为单个按键?

    Console ReadKey 仅在按下 正常 键时捕获输入 然后将修饰符 如果有 附加为键信息的一部分 如何将单个修饰键注册为输入 提供了一种解决方案这个链接 https blogs msdn microsoft com toub 200
  • ASP.NET 中获取当前域的最佳方法是什么?

    我想知道在 ASP NET 中获取当前域的最佳方法是什么 例如 http www domainname com subdir http www domainname com subdir 应该产生http www domainname co
  • vs2008 c#:Facebook.rest.api如何使用它来获取好友列表?

    如何在此基础上取得进一步的进步 获取好友列表的下一步是什么 string APIKey ConfigurationManager AppSettings API Key string APISecret ConfigurationManag
  • 如何在 QTabWidget Qt 中展开选项卡

    我有一个QTabWidget像这个 但我想展开选项卡以 填充 整个小部件宽度 如下所示 我怎样才能做到这一点 我在用Qt 5 3 2 and Qt 创建者 3 2 1 Update 我尝试使用setExpanding功能 ui gt myT
  • 单例模式和 std::unique_ptr

    std unique ptr唯一地控制它指向的对象 因此不使用引用计数 单例确保利用引用计数只能创建一个对象 那么会std unique ptr与单例执行相同 单例确保只有一个实例属于一种类型 A unique ptr确保只有一个智能指针到
  • 在 JSQMessagesViewController 中显示 LocationMediaItem

    我刚刚尝试实施LocationMediaItem in my Xamarin iOS应用程序使用JSQMessagesViewController 一切都很顺利 唯一的问题是UICollectionView应该显示位置的单元格永远停留在加载
  • 从 WebBrowser 控件 C# 获取滚动值

    我试图在 WebBrowser 控件中获取网页的 Y 滚动索引 但无法访问内置滚动条的值 有任何想法吗 对于标准模式下的 IE 使用文档类型 正如你所说 scrollTop是的财产元素 而不是 HtmlDocument htmlDoc th
  • Visual Studio Code:如何配置 includePath 以获得更好的 IntelliSense 结果

    我是使用 Visual Studio Code 的完全初学者 我不知道我在做什么 我已经四处搜索 也许还不够 但我找不到像我这样的人如何配置的简单解释c cpp properties json每当我单击带有绿色波浪线下划线的行旁边的黄色灯泡
  • C# 构建一个 webservice 方法,它接受 POST 方法,如 HttpWebRequest 方法

    我需要一个接受 POST 方法的 Web 服务 访问我的服务器正在使用 POST 方法 它向我发送了一个 xml 我应该用一些 xml 进行响应 另一方面 当我访问他时 我已经使用 HttpWebRequest 类进行了管理 并且工作正常
  • 如何在标准 WPF ListView 中启用 UI 虚拟化

    我正在使用 NET 4 5 VS2012 并且我有一个 ListView 看起来像这样
  • 在 EnvDTE 中调试时捕获 VS 局部变量

    是否可以使用 EnvDTE 进行 vsix Visual Studio 扩展来捕获本地和调试窗口使用的调试数据 或者可以通过其他方法吗 我想创建一个自定义的本地窗口 我们可以修改它以根据需要显示一些较重的内容 而无需为高级用户牺牲原始的本地
  • 终结器线程的范围是什么 - 每个应用程序域或每个进程?

    根据我的所有阅读 应该有一个 GC 线程来调用所有终结器 现在的问题是这个 一个 线程的范围是什么 每个进程或每个应用程序域 因为域的整体目的是在一个进程空间中分离并创建 独立 的不同应用程序 I read here http dn cod
  • 跨多个域的 ASP.NET 会话

    是否有合适的 NET 解决方案来在多个域上提供持久服务器会话 即 如果该网站的用户在 www site1 com 下登录 他们也将在 www site2 com 下登录 安全是我们正在开发的程序的一个问题 Thanks 它是否需要在会话中
  • 每个数据库多个/单个 *.edmx 文件

    我有一个通过 ADO net 数据服务与数据库交互的项目 数据库很大 近 150 个具有依赖关系的表 该项目几年前开始 当时使用的是数据集 现在我们正在转向实体模型关系 由于我们添加了更多需要使用的表 该模型正在不断增长 这是管理这一切的正
  • Java 和/C++ 在多线程方面的差异

    我读过一些提示 多线程实现很大程度上取决于您正在使用的目标操作系统 操作系统最终提供了多线程能力 比如Linux有POSIX标准实现 而windows32有另一种方式 但我想知道编程语言水平的主要不同 C似乎为同步提供了更多选择 例如互斥锁

随机推荐