簡體   English   中英

模型和成員資格提供者MVC4

[英]Model and Membership Provider MVC4

我需要您的幫助,以指導您可能會在MVC4中很好地實現模型。 我會讓你看看我的模特。 但是我真的不知道如何將其鏈接到MVC4中的成員資格提供者,我想構建招標應用程序系統,並且我有以下模型

  • 投標:誰添加項目?
  • 供應商/提供者:誰競標項目
  • 項目:通過招標添加的項目(完成)
  • 要求:每個項目都有幾個要求。(完成)

    1. 我做了項目和需求模型。但是不確定如何做招標和供應商!! 因為他們兩個都必須注冊..!?

    2.我的多對多關系正確嗎? 在項目表和需求表之間。

現在這些是我的上下文模型:

   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

如果我理解正確,在您的申請中您將扮演兩個角色, 招標人和供應商 另外,您希望招標能夠添加項目 ,然后將需求project關聯。

為了實現這一點,首先您需要配置SimpleMembershipProvider以使其具有“ 招標 ”和“ 供應商 ”兩個角色。

  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的博客

  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屬性裝飾您的類

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM