2014-05-19 133 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