[英]Model and Membership Provider MVC4
我需要您的幫助,以指導您可能會在MVC4中很好地實現模型。 我會讓你看看我的模特。 但是我真的不知道如何將其鏈接到MVC4中的成員資格提供者,我想構建招標應用程序系統,並且我有以下模型
要求:每個項目都有幾個要求。(完成)
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以使其具有“ 招標 ”和“ 供應商 ”兩個角色。
首先在配置文件中,通過執行以下操作,用SimpleMembershipProvider替換經典的成員資格提供程序
啟用遷移
種子成員和角色
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的博客
現在創建您的模型
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.