public ActionResult CreateAccountUser([Bind(Include = "UserName,DisplayName,CompanyName,Organization,RawPassword")] CreateAccountUserViewModel viewModel) { // パスワードは自動生成する // TODO:以下のメソッドは記号以外の文字種を全て織り交ぜない場合があるのでイマイチ。 // パスワードポリシーによっては自作すべきかもしれない。 viewModel.RawPassword = Membership.GeneratePassword(8, 1); AccountUser accountUser = new AccountUser() { UserName = viewModel.UserName, DisplayName = viewModel.DisplayName, Organization = viewModel.Organization }; accountUser.Password = Models.User.GenerateHashedPassword(viewModel.RawPassword); accountUser.UserType = 1; // TODO: 不要であれば削除 // 企業エンティティを作成し、関連付ける Company company = new Company() { CompanyName = viewModel.CompanyName }; accountUser.Company = company; // TODO:現在、UserNameやCompanyNameの重複チェックは行っていない。 try { db.Companies.Add(company); db.Users.Add(accountUser); db.SaveChanges(); ViewBag.CompanyId = company.ID; return View("CreateCompleted", viewModel); } catch { return View(); } }
public Project GetProject(int projectId, AccountUser accountUser) { // TODO: トランザクションの検討 var db = this.DbContext; if (db == null) { // DBコンテキストが正しく設定されていない throw new InvalidOperationException("データベースコンテキストが設定されていません。"); } // 所属会社のプロジェクトのみ取得可能 db.Companies.Attach(accountUser.Company); var projectQuery = db.Projects .Where(p => p.ID == projectId && p.Company.ID == accountUser.Company.ID) .Include(p => p.ProjectPage) .Include(p => p.Duration); LogUtility.DebugWriteQuery(projectQuery); var project = projectQuery.FirstOrDefault(); return project; }