0

Customers.cs

public partial class Customers
{
    public int sno { get; set; }
    public string CustomerName { get; set; }
    public string CustomerNo { get; set; }
    ...
    // 20 more attribute too...
}

Cities.cs

public partial class Cities
{
    public int sno { get; set; }
    public string CityName { get; set; }
    public string CityPlate { get; set; }
    public string CityPhoneCode { get; set; }
}

AddCustomerViewModel.cs

public class AddCustomerViewModel
{

    [Required(ErrorMessage = "Şehir seçiniz.")]
    [Display(Name = "Şehir")]
    public Nullable<int> CityId { get; set; }

    // same with Customers.cs
    public int sno { get; set; }

    [Required(ErrorMessage = "Müşteri adını giriniz!")]
    [Display(Name = "Müşteri Adı")]
    public string CustomerName { get; set; }

    [Required(ErrorMessage = "Müşteri numarası giriniz!")]
    [Display(Name = "Müşteri Numarası")]
    public string CustomerNo { get; set; }
    ...
    // 20 more attribute too...
}

コントローラ

[Authorize(Roles = "Administrator")]
public ActionResult AddCustomer()
{
    AddCustomerViewModel addCustomerViewModel = new AddCustomerViewModel();
    addCustomerViewModel.Cities = entity.Cities;

    return View(addCustomerViewModel);
}

[HttpPost]
[Authorize(Roles = "Administrator")]
public ActionResult AddCustomer(AddCustomerViewModel addCustomerViewModel)
{
    entity.Customers.Add(GetCustomerFromViewModel(addCustomerViewModel));
    entity.SaveChanges();

    return View(addCustomerViewModel);
}

GetCustomerFromViewModel以下のように、addCustomerViewModelをCustomerに変換するために呼び出される関数を使用しています。

GetCustomerFromViewModel()

private Customers GetCustomerFromViewModel(AddCustomerViewModel addCustomerViewModel)
{
    Customers customer = new Customers();

    customer.CityId = addCustomerViewModel.CityId;
    customer.CreatorUserId = (Guid)System.Web.Security.Membership.GetUser().ProviderUserKey;
    customer.CustomerName = addCustomerViewModel.CustomerName;
    customer.CustomerNo = addCustomerViewModel.CustomerNo;
    customer.Description = addCustomerViewModel.Description;
    ...
    // 20 more attribute too...

    return customer;
}

ただし、Customersクラスの変数(customerNo、CustomerName、...)が多すぎるため、これは適切な方法ではありません。

DbContextGeneratorを使用してクラスをdataAnnotationsに追加し、モデルをudatedすると、dataAnnotationsが削除されます。(DbContextクラスも更新されるため)

DataAnnotationsでViewModelsを使用するにはどうすればよいですか。そして、Dbへの効果的な挿入操作?記事、チュートリアル、例、またはアドバイス?

説明できるといいのですが。

どうもありがとう...

4

1 に答える 1

3

各プロパティを手動でマッピングする必要がないように、ドメイン モデルとビュー モデル間のマッピング ロジックを簡素化するAutoMapperを参照してください。それ以外は、コードに問題はありません。既にビュー モデルを使用しており、マッピング レイヤーがあります。したがって、GetCustomerFromViewModel関数は次のようになります。

private Customers GetCustomerFromViewModel(AddCustomerViewModel addCustomerViewModel)
{
    return Mapper.Map<AddCustomerViewModel, Customers>(addCustomerViewModel);
}

または、この関数はあまり価値をもたらさないため、完全に削除してコントローラー アクションで AutoMapper 呼び出しを直接使用します。

[HttpPost]
[Authorize(Roles = "Administrator")]
public ActionResult AddCustomer(AddCustomerViewModel addCustomerViewModel)
{
    var customer = Mapper.Map<AddCustomerViewModel, Customers>(addCustomerViewModel);
    entity.Customers.Add(customer);
    entity.SaveChanges();

    return View(addCustomerViewModel);
}
于 2012-10-15T08:38:58.983 に答える