Blog của Lê Văn Luật

Đời người thì có hạn mà sự học thì vô hạn!

WPF: Data Annotations với CodeFirst trong WPF

DataAnnotations cho phép xác định các đặc tính (Attributes) của thuộc tính (Property) – các đặc tính này giúp kiểm tra tính hợp lệ của dữ liệu (Data validation) và xác định cách thức tạo cơ sở dữ liệu.

Để có thể sử dụng Data Annotations cần thực hiện:

1. Chọn menu Project -> Add reference -> Đánh dấu mục System.ComponenetModel.DataAnnotations

2. using System.ComponenetModel.DataAnnotations

Ví dụ:

using System;
using System.Collections.Generic;
using System.Windows.Documents;
using System.Windows.Input;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity;
using System.Data.Linq;
using System.Data.Entity.Validation;
using System.Diagnostics;
using System.Collections.ObjectModel;

namespace TestDataAnnotations
{
    public class DataSource : DbContext
    {
        public DataSource() : base("TestDataAnnotations")
        {
            Database.SetInitializer(new DropCreateDatabaseIfModelChanges<DataSource>());
        }

        public DbSet<MặtHàng> MặtHàngs { get; set; }
        public DbSet<ĐốiTượng> ĐốiTượngs { get; set; }
        public DbSet<NhậpXuất> NhậpXuấts { get; set; }
        public DbSet<NhậpXuấtChiTiết> NhậpXuấtChiTiếts { get; set; }
    }

    [Table("tblMatHang")]
    public class MặtHàng
    {
        [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int MH { get; set; }
        [Required(ErrorMessage="Phải nhập Mã mặt hàng!"),
         StringLength(20),
         RegularExpression(@"^\w{1, 20}$",
             ErrorMessage="Mã mặt hàng dài tối đa 20 ký tự và chỉ có thể gồm các chữ cái và chữ số!")]
        public string Mã { get; set; }
        [Required(ErrorMessage = "Phải nhập Tên mặt hàng!"), StringLength(500)]
        public string Tên { get; set; }
        [Required(ErrorMessage="Phải nhập Đơn vị tính!"), StringLength(20)]
        public string ĐơnVịTính { get; set; }
        public bool Bỏ { get; set; }
        [StringLength(500)]
        public string GhiChú { get; set; }
    }

    public enum LoạiĐốiTượng
    {
        KháchHàng,
        NhàCungCấp,
        KháchHàngNhàCungCấp
    }

    [Table("tblDoiTuong")]
    public class ĐốiTượng
    {
        [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int DT { get; set; }
        [Required(ErrorMessage = "Phải nhập Mã đối tượng!"),
         StringLength(20),
         RegularExpression(@"^\w+$",
           ErrorMessage = "Mã đối tượng dài tối đa 20 ký tự và chỉ có thể gồm các chữ cái và chữ số!")]
        public string Mã { get; set; }
        [Required(ErrorMessage="Phải nhập tên đối tượng!"), StringLength(500)]
        public string Tên { get; set; }
        [Required(ErrorMessage="Phải nhập loại đối tượng!"),
         EnumDataType(typeof(LoạiĐốiTượng), 
             ErrorMessage="Loại đối tượng chỉ có thể là Nhà cung cấp/Khách hàng/Nhà cung cấp và Khách hàng")]
        // Loại đối tượng có thể là: KH - Khách hàng, NC - Nhà cung cấp, KN - Vừa là Khách hàng, vừa là Nhà cung cấp.
        public LoạiĐốiTượng Loại { get; set; }
        [Required(ErrorMessage = "Phải xác định mặt hàng đã bỏ hay đang còn kinh doanh!")]
        public bool Bỏ { get; set; }
    }

    public enum LoạiNhậpXuất
    {
        Nhập,
        Xuất
    }

    [Table("tblNhapXuat")]
    public class NhậpXuất
    {
        public NhậpXuất()
        {
            ChiTiết = new ObservableCollection<NhậpXuấtChiTiết>();
        }

        [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int NX { get; set; }
        [Required(ErrorMessage="Phải xác định loại phiếu (Nhập hay Xuất)!"),
         EnumDataType(typeof(LoạiNhậpXuất), ErrorMessage="Loại phiếu chỉ có thể là Nhập hoặc Xuất!")]
        public LoạiNhậpXuất Loại { get; set; }
        [Required(ErrorMessage = "Phải xác định ngày nhập/xuất")]
        public DateTime Ngày { get; set; }
        [StringLength(500)]
        public string DiễnGiải { get; set; }
        public ĐốiTượng ĐốiTượng { get; set; }
        public virtual ObservableCollection<NhậpXuấtChiTiết> ChiTiết { get; set; }
    }

    [Table("tblNhapXuatChiTiet")]
    public class NhậpXuấtChiTiết
    {
        [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int NXCT { get; set; }
        public NhậpXuất NhậpXuất { get; set; }
        public MặtHàng MặtHàng { get; set; }
        [Required(ErrorMessage="Phải nhập số lượng!")]
        public float SốLượng { get; set; }
        [DataType(DataType.Currency), Required(ErrorMessage = "Phải nhập đơn giá!")]
        public float ĐơnGiá { get; set; }
        [StringLength(500)]
        public string GhiChú { get; set; }
    }
}

Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s

Information

This entry was posted on 12/06/2014 by in Lập trình C# & WPF.

Điều hướng

%d bloggers like this: