Entity Framework Code First + ViewMakerの開発は楽しい!!
以下のコードだけでDBアプリができてしまいます。SQLコードゼロ、XAMLゼロなので本当にC#だけで開発ができてしまいます。
Naked Objectsの思想に近いかもしれませんが、ドメインモデル+ViewModelで業務アプリ開発のブレークスルーを目指したいです。
using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel; using System.ComponentModel.DataAnnotations; using System.Data.Entity; using System.Windows; using System.Windows.Input; using ViewMaker; namespace CodeOnlyDevelop { public class Category { [Key] [Required] public virtual string CategoryId { get; set; } public virtual string Name { get; set; } public virtual ICollection<Product> Products { get; set; } } public class Product { [Key] [Required] public virtual int ProductId { get; set; } public virtual string Name { get; set; } public virtual string CategoryId { get; set; } } public class ProductContext : DbContext { public DbSet<Category> Categories { get; set; } public DbSet<Product> Products { get; set; } } public class EditListViewModel<T> : ViewModel where T : new() { private ProductContext db; [Browsable(true)] public ObservableCollection<T> ListData { get { return _listData; } set { _listData = value; OnPropertyChanged("ListData"); } } public ObservableCollection<T> _listData; public EditListViewModel() { db = new ProductContext(); } public ICommand LoadCommand { get { return CreateCommand(Load); } } private void Load() { db.Set(typeof(T)).Load(); ListData = (ObservableCollection<T>)db.Set(typeof(T)).Local; } public ICommand SaveCommand { get { return CreateCommand(Save); } } private void Save() { db.SaveChanges(); } } public partial class App : Application { private void Application_Startup(object sender, StartupEventArgs e) { Database.SetInitializer(new DropCreateDatabaseIfModelChanges<ProductContext>()); ViewUtil.Show(new EditListViewModel<Product>()); ViewUtil.Show(new EditListViewModel<Category>()); } } }