【问题标题】:Model and Membership Provider MVC4模型和成员资格提供程序 MVC4
【发布时间】:2014-05-19 12:50:20
【问题描述】:

我需要您的帮助来指导可能在 MVC4 中实现模型的好方法。 我会让你看看我的模型。但我真的不知道如何将其链接到 MVC4 中的 Membership Provider 我要搭建招标应用系统,我有以下模型

  • 招标:谁添加项目?
  • 供应商/供应商:项目投标人
  • 项目:通过招标添加的项目(完成)
  • 需求:每个项目都有几个需求。(完成)

    1. 我做了项目和需求模型..但不知道如何做招标和供应商!因为他们两个都要注册..!?

    2.我的多对多关系正确吗?在 Project 和 Requirement 表之间。?

现在这些是我的带有上下文的模型:

   public class ProjectContext : DbContext
{
    public ProjectContext()
        : base("ProjectsDB")
    {
    }

    public DbSet<ProjectEntry> Entries { get; set; }
    public DbSet<Requiernments> RequiernmentEntries { get; set; }
    //public DbSet<UserProfile> UserProfiles { get; set; }



}





     public class ProjectEntry
{
    [Key]
    public int ID { get; set; }
    [Required]
    public string ProjectName { get; set; }
    public string Description { get; set; }
    public string Statue {get; set; }
    public string UplodedFiles { get; set; }
    public string Budget { get; set; }
    public string EstimateTime { get; set; }
    public string Criterias { get; set; }
    public DateTime? DueDate { get; set; }

}


            public class Requiernments
{
                            [Key]
                            public int RequiernmentId { get; set; }
                            public int ID { get; set; }

                            public string RequiernmentName { get; set; }

                            /// <summary>
                            /// 1: Must to Have 
                            /// 2: Nice to Have 
                            /// 3: Should have
                            /// </summary>
                            public string RequiernmentType { get; set; }

                            public string RequiernmentPrioritet { get; set; }

                            public float RequiernmenWhight { get; set; }
                            public string ProviderAnswer { get; set; }
                            public string ProviderComments{ get; set; }



}: 

更新 2:

  // POST: /Account/Register

    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public ActionResult Register(RegisterModel model)
    {
        if (ModelState.IsValid)
        {
            // Attempt to register the user
            try
            {

                if (!Roles.RoleExists("Admin"))
                    Roles.CreateRole("Admin");

                if (!Roles.RoleExists("Member"))
                    Roles.CreateRole("Member");

                if (!Roles.RoleExists("Tender"))
                    Roles.CreateRole("Tender");

                if (!Roles.RoleExists("Provider"))
                    Roles.CreateRole("Provider");

                WebSecurity.CreateUserAndAccount(model.UserName, model.Password,
                     new
                     {
                         EmailAddress = model.EmailAddress
                     }, false);
                Roles.AddUserToRole(model.UserName, "Member");
                WebSecurity.Login(model.UserName, model.Password);

                return RedirectToAction("Index", "Home");
            }
            catch (MembershipCreateUserException e)
            {
                ModelState.AddModelError("", ErrorCodeToString(e.StatusCode));
            }
        }

        // If we got this far, something failed, redisplay form
        return View(model);
    }

  <connectionStrings>
  <add name="DefaultConnection" connectionString="Data Source=user-Pc\SQL2012;Initial       Catalog=MemberDB;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\MemberDB.mdf"   providerName="System.Data.SqlClient" />




 </connectionStrings>

图片:

    http://i58.tinypic.com/2rp8i86.png

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-4 model


    【解决方案1】:

    如果我理解正确,在您的应用程序中,您有两个角色,tendersupplier。此外,您希望 tender 能够添加 project,然后将 requirementsproject 相关联。 p>

    为了实现这一点,首先您需要将 SimpleMembershipProvider 配置为具有两个角色“tender”和“supplier

    1. 首先在配置文件中,用 SimpleMembershipProvider 替换经典会员提供程序


    2. 启用迁移

    3. 种子成员和角色

      protected override void Seed(MovieDb context)
      {            
      //context.Movies.AddOrUpdate(...);
      
      // ...
      
          SeedMembership();
      }
      
      private void SeedMembership()
      {            
          WebSecurity.InitializeDatabaseConnection("DefaultConnection",
              "UserProfile", "UserId", "UserName", autoCreateTables: true);
      
      var roles = (SimpleRoleProvider) Roles.Provider;
      var membership = (SimpleMembershipProvider) Membership.Provider;
      
      if (!roles.RoleExists("Admin"))
      {
          roles.CreateRole("Admin");
      }
      if (membership.GetUser("sallen",false) == null)
      {
          membership.CreateUserAndAccount("sallen", "imalittleteapot");
      }
      if (!roles.GetRolesForUser("sallen").Contains("Admin"))
      {
          roles.AddUsersToRoles(new[] {"sallen"}, new[] {"admin"});
      }
      

      }

    步骤 1,2,3 参考: Scott Allen's blog

    1. 现在创建你的模型

      public class Tender
      {
          public int TenderId { get;set;} 
          public int UserId {get;set;}  //this links to the userid in the UserProfiles table
          public virtual ICollection<Project> Projects {get;set;} 
      }
      
      public class Project
      {
          public int ProjectId {get;set;}
          public int TenderId {get;set;}
      
          public virtual Tender Tender {get;set;}
          public virtual ICollection<Supplier> Suppliers {get;set;}
          public virtual ICollection<Requirement> Requirements {get;set;}
      }
      
      public class Supplier
      {  
          public int SupplierId {get;set;}
      
          public virtual ICollection<Project> Projects {get;set;}
      }
      
      public class Requirement
      {
           public int RequirmentId {get;set;}
           public int ProjectId {get;set;}
      
           public virtual Project Project {get;set;}
      }
      

    由于供应商可以投标多个项目,项目可以有多个投标人,因此供应商和项目具有多对多关系,您可能需要一个映射表。

    在 OnModelCreating 方法中,

    modelBuilder.Entity<Project>()
                    .HasMany(p => p.Suppliers)
                    .WithMany(s => s.Projects)
                    .Map(map =>
                    {
                        map.ToTable("Project_Supplier_Map")
                           .MapLeftKey("SupplierId")
                           .MapRightKey("ProjectId");
                    });
    

    现在你有了你的模型,只需要用 Authorize 属性装饰你的类

    【讨论】:

    • 那么,有 2 个数据库可以吗?我有一个创建 projectDB(项目,需求表)的项目上下文和另一个默认连接...?我已经有(帐户模型,帐户控制器,帐户视图)...默认情况下(我认为这就是您所说的简单成员资格。 ..对吗?)......
    • 没有。你得到的是经典的会员提供者。我推荐使用 SimpleMembershipProvider,再次请参考 Scott Allen 的博客。 odetocode.com/blogs/scott/archive/2012/09/05/…
    • 但是使用经典的membershipprovider,您已经拥有所有必需的表格......我认为这要好得多......对吗?
    • 嗯,是的,你是对的。我推荐使用 SimpleMembershipProvider 的原因是因为您使用的是支持它的 ASP.NET MVC4 框架。但是,无论membershipprovider 不是您的问题的重点,重点是在将用户链接到投标的投标模型中放置一个userId 属性。
    • 我仍然没有得到它..参考您的解决方案.. 我将拥有多少个数据库?2 个还是一个? .见更新2
    猜你喜欢
    • 2011-03-19
    • 1970-01-01
    • 2011-01-29
    • 2013-11-04
    • 1970-01-01
    • 1970-01-01
    • 2010-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多