MVC3、c# での作業
モデル、クラス、データベース テーブル、および部分クラスの「階層」について疑問に思っています。
データベースには、次のような構造の UserAccount テーブルがあります。
USERACCOUNT: UserId、名、姓、ログイン、パスワード、電子メール
私のプロジェクトには、UserModel というモデルがあります。プロパティをデータ注釈で装飾できるように使用しています。次のように、useraccount クラスのメタデータ型として設定されます。
[MetadataType(typeof(UserModel))]
public partial class useraccount
{
}
public class UserModel
{
public int UserId { get; set; }
[Display(Name="First Name")]
[StringLength(20)]
[Required]
public string FirstName { get; set; }
[Display(Name = "Last Name")]
[StringLength(30)]
[Required]
public string LastName { get; set; }
[Display(Name = "Email Address")]
[StringLength(20)]
[Required]
public string email { get; set; }
[Remote("IsUserNameAvailable", "Validation")]
[Display(Name = "Choose a Login Name")]
[StringLength(40)]
[Required]
public string login { get; set; }
[Display(Name = "Choose a Password")]
[StringLength(64)]
[Required]
public string password { get; set; }
[Display(Name = "Enter Password Again")]
[StringLength(64)]
[Required]
public string confirmPassword { get; set; }
}
データベース テーブルには「Password」列がありますが、UserModel には「confirmPassword」はありません。
私の考えでは、メタデータに UserModel クラスを使用する UserAccount クラスには、「confirmPassword」の定義が含まれているはずです。
これが私が抱えている問題です。Register ビューでは、UserModel をモデルとして使用しているため、ページの上部に次のように表示されます。
@model OurAgreements.Models.UserModel
保存しようとすると、コントローラーに問題が発生します。このコード:
public ActionResult Register(UserModel model)
{
var repo = new Repository();
if (ModelState.IsValid)
{
using (var db = new ouragreementEntities())
{
db.useraccount.Add(model);
db.SaveChanges();
}
return View();
}
エラーが発生し、UserModel をユーザーアカウントに変換できません。私はこれを理解できます。すべての列と一致しないテーブルにデータを入れようとしています。
そこで、ビューのモデルを次のように変更すると考えました。
@model OurAgreements.Models.useraccount
私の考えでは、useraccountクラスはUserModelを使用する必要がありますが、それを行うと、「useraccountには「confirmPassword」の定義がありません」というエラーが発生します
だから私は少し立ち往生しています。UserModel をモデルとして使用するように切り替えることができることはわかっています。その後、コントローラーで新しいユーザー アカウント インスタンスを作成し、モデルからのデータを入力して、インスタンスをデータベースに保存できます。
それで、私の質問だと思いますが、useraccount に confirmPassword の定義が含まれていないのはなぜですか?