2014-05-19 97 views
0

我需要你的指導幫助可能成爲在MVC4中實現Model的好方法。 我會讓你看到我的模型。但我真的不知道如何在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 

回答

0

如果我理解正確,在您的應用程序中您有兩個角色,投標供應商。此外,要招標能夠添加項目然後要求項目關聯。

爲了做到這一點,首先你需要配置SimpleMembershipProvider有兩個作用「招標」和「供應商

  1. 首先在配置文件中,應更換通過這樣做

    SimpleMembershipProvider經典的成員提供3210

  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"); 
       }); 

現在,你有你的模型,只需要來裝飾你的類屬性授權

+0

是這樣,OKY有2個數據庫?我有一個projectcontext,它創建projectDB(項目,需求表)和另一個默認連接...?我已經有(帳戶模型,帳戶控制器,帳戶視圖)...默認情況下(我認爲這就是你所說的簡單會員。 ..right?)..... – user1476956

+0

不,你得到的是經典membershipprovider。我建議再次使用SimpleMembershipProvider,請參閱Scott Allen的博客。 http://odetocode.com/blogs/scott/archive/2012/09/05/seeding-membership-amp-roles-in-asp-net-mvc-4.aspx – Larry

+0

但使用經典membershipprovider你已經擁有了所有必需的表格....我覺得好多了...對吧? – user1476956