{"id":31301,"date":"2024-10-28T11:19:06","date_gmt":"2024-10-28T11:19:06","guid":{"rendered":"http:\/\/atmokpo.com\/w\/?p=31301"},"modified":"2024-11-26T06:45:34","modified_gmt":"2024-11-26T06:45:34","slug":"wpf-%ea%b0%95%ec%a2%8c-entity-framework%ec%99%80-wpf%eb%a5%bc-%ec%82%ac%ec%9a%a9%ed%95%9c-crud-%ec%95%a0%ed%94%8c%eb%a6%ac%ec%bc%80%ec%9d%b4%ec%85%98-%eb%a7%8c%eb%93%a4%ea%b8%b0","status":"publish","type":"post","link":"https:\/\/atmokpo.com\/w\/31301\/","title":{"rendered":"WPF \uac15\uc88c, Entity Framework\uc640 WPF\ub97c \uc0ac\uc6a9\ud55c CRUD \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \ub9cc\ub4e4\uae30"},"content":{"rendered":"<p>\n    Windows Presentation Foundation(WPF)\ub294 \ub9c8\uc774\ud06c\ub85c\uc18c\ud504\ud2b8\uc5d0\uc11c \uc81c\uacf5\ud558\ub294 UI \ud504\ub808\uc784\uc6cc\ud06c\ub85c, \ub370\uc2a4\ud06c\ud0d1 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uac1c\ubc1c\ud558\ub294 \ub370 \uc0ac\uc6a9\ub429\ub2c8\ub2e4. WPF\ub294 \uc0ac\uc6a9\uc790 \uc778\ud130\ud398\uc774\uc2a4(UI)\ub97c \uad6c\uc131\ud558\ub294 \ub370 \uc788\uc5b4 \uac15\ub825\ud55c \ub3c4\uad6c\ub97c \uc81c\uacf5\ud558\uba70, \ub2e4\uc591\ud55c \ub370\uc774\ud130 \ubc14\uc778\ub529 \ubc0f \uad00\uacc4\ud615 \ub370\uc774\ud130 \uc800\uc7a5\uc18c\uc640\uc758 \ud1b5\ud569\uc744 \uc27d\uac8c \ud560 \uc218 \uc788\uac8c \ud574\uc90d\ub2c8\ub2e4. \uc774 \uac15\uc88c\uc5d0\uc11c\ub294 Entity Framework\ub97c \uc0ac\uc6a9\ud558\uc5ec WPF \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc5d0\uc11c CRUD(\uc0dd\uc131, \uc77d\uae30, \uc218\uc815, \uc0ad\uc81c) \uc791\uc5c5\uc744 \uad6c\ud604\ud558\ub294 \ubc29\ubc95\uc744 \uc790\uc138\ud788 \uc124\uba85\ud569\ub2c8\ub2e4.\n<\/p>\n<h2>1. WPF \ubc0f Entity Framework \uc18c\uac1c<\/h2>\n<p>\n    WPF\ub294 XAML(Extensible Application Markup Language)\uc744 \uc0ac\uc6a9\ud558\uc5ec UI\ub97c \ub514\uc790\uc778\ud560 \uc218 \uc788\ub294 \uae30\ub2a5\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4. \ub370\uc774\ud130 \ubc14\uc778\ub529, \uc2a4\ud0c0\uc77c \uc9c0\uc815, \uc560\ub2c8\uba54\uc774\uc158 \ub4f1\uc758 \uae30\ub2a5\uc744 \ud1b5\ud574 \ubcf5\uc7a1\ud55c \uc0ac\uc6a9\uc790 \uc778\ud130\ud398\uc774\uc2a4\ub97c \uc27d\uac8c \uad6c\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ud55c\ud3b8, Entity Framework\ub294 ORM(Object-Relational Mapping) \ud504\ub808\uc784\uc6cc\ud06c\ub85c, \uad00\uacc4\ud615 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc758 \ub370\uc774\ud130\ub97c \uac1d\uccb4\ub85c \ub9e4\ud551\ud558\uc5ec \ub370\uc774\ud130 \uc870\uc791\uc744 \uc27d\uac8c \ub9cc\ub4e4\uc5b4\uc90d\ub2c8\ub2e4. WPF\uc640 Entity Framework\ub97c \uc870\ud569\ud558\uba74, \ub370\uc774\ud130 \uc911\uc2ec \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uc27d\uac8c \uac1c\ubc1c\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n<\/p>\n<h2>2. \uac1c\ubc1c \ud658\uacbd \uc124\uc815<\/h2>\n<p>\n    \ubcf8 \uac15\uc88c\uc5d0\uc11c\ub294 Visual Studio 2022\ub97c \uc0ac\uc6a9\ud558\uc5ec WPF \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uac1c\ubc1c\ud560 \uac83\uc785\ub2c8\ub2e4. \ub610\ud55c, Entity Framework Core\ub97c \uc0ac\uc6a9\ud558\uc5ec \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc640 \uc0c1\ud638\uc791\uc6a9\ud569\ub2c8\ub2e4. \uc544\ub798\ub294 \uac1c\ubc1c \ud658\uacbd\uc744 \uc124\uc815\ud558\ub294 \ub2e8\uacc4\uc785\ub2c8\ub2e4.\n<\/p>\n<ul>\n<li>Visual Studio 2022\ub97c \ub2e4\uc6b4\ub85c\ub4dc\ud558\uace0 \uc124\uce58\ud569\ub2c8\ub2e4.<\/li>\n<li>\uc0c8 \ud504\ub85c\uc81d\ud2b8\ub97c \uc0dd\uc131\ud558\uace0, WPF App(.NET Core) \ud15c\ud50c\ub9bf\uc744 \uc120\ud0dd\ud569\ub2c8\ub2e4.<\/li>\n<li>\uac1c\ubc1c\uc5d0 \ud544\uc694\ud55c NuGet \ud328\ud0a4\uc9c0\ub97c \uc124\uce58\ud569\ub2c8\ub2e4. \uc5ec\uae30\uc11c\ub294 Entity Framework Core\uc640 \uadf8\uc5d0 \ub9de\ub294 \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uacf5\uae09\uc790 (\uc608: Microsoft.EntityFrameworkCore.SqlServer)\ub97c \uc124\uce58\ud569\ub2c8\ub2e4.<\/li>\n<li>\ud504\ub85c\uc81d\ud2b8\uc758 \uc571 \uc124\uc815 \ud30c\uc77c (appsettings.json)\uc5d0 \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uc5f0\uacb0 \ubb38\uc790\uc5f4\uc744 \uc124\uc815\ud569\ub2c8\ub2e4.<\/li>\n<\/ul>\n<h2>3. \ub370\uc774\ud130 \ubaa8\ub378 \uc815\uc758<\/h2>\n<p>\n    CRUD \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc5d0\uc11c \uac00\uc7a5 \uc911\uc694\ud55c \ubd80\ubd84\uc740 \ub370\uc774\ud130 \ubaa8\ub378\uc785\ub2c8\ub2e4. Entity Framework\ub97c \uc0ac\uc6a9\ud558\uba74 C# \ud074\ub798\uc2a4\ub97c \ub370\uc774\ud130 \ubaa8\ub378\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc544\ub798\ub294 \uc608\uc81c\ub85c \uc0ac\uc6a9\ud560 &#8220;Product&#8221; \ubaa8\ub378\uc744 \uc815\uc758\ud558\ub294 \ubc29\ubc95\uc785\ub2c8\ub2e4.\n<\/p>\n<pre>\n<code class=\"language-csharp\">\npublic class Product\n{\n    public int Id { get; set; }\n    public string Name { get; set; }\n    public decimal Price { get; set; }\n}\n<\/code>\n<\/pre>\n<p>\n    \uc704\uc758 Product \ud074\ub798\uc2a4\ub294 \uc81c\ud488\uc758 ID, \uc774\ub984, \uac00\uaca9\uc744 \ub098\ud0c0\ub0c5\ub2c8\ub2e4. \uc774\uc81c \uc774 \ubaa8\ub378\uc744 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc640 \ub3d9\uae30\ud654\ud558\uae30 \uc704\ud574 DbContext \ud074\ub798\uc2a4\ub97c \uc0dd\uc131\ud569\ub2c8\ub2e4.\n<\/p>\n<pre>\n<code class=\"language-csharp\">\nusing Microsoft.EntityFrameworkCore;\n\npublic class AppDbContext : DbContext\n{\n    public DbSet<product> Products { get; set; }\n\n    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)\n    {\n        optionsBuilder.UseSqlServer(\"YourConnectionStringHere\");\n    }\n}\n<\/product><\/code>\n<\/pre>\n<h2>4. \ub9c8\uc774\uadf8\ub808\uc774\uc158\uacfc \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uc0dd\uc131<\/h2>\n<p>\n    \ub370\uc774\ud130 \ubaa8\ub378\uc744 \uc815\uc758\ud55c \ud6c4, \ub370\uc774\ud130\ubca0\uc774\uc2a4\ub97c \uc0dd\uc131\ud558\uace0 \uc774\ub97c \uc5c5\ub370\uc774\ud2b8\ud558\ub294 \uac83\uc774 \ud544\uc694\ud569\ub2c8\ub2e4. \uc774\ub294 Entity Framework\uc758 \ub9c8\uc774\uadf8\ub808\uc774\uc158 \uae30\ub2a5\uc744 \ud1b5\ud574 \uc774\ub8e8\uc5b4\uc9d1\ub2c8\ub2e4. \ud130\ubbf8\ub110 \ub610\ub294 \ud328\ud0a4\uc9c0 \uad00\ub9ac \ucf58\uc194\uc5d0\uc11c \ub2e4\uc74c \uba85\ub839\uc5b4\ub97c \uc2e4\ud589\ud558\uc5ec \ucd08\uae30 \ub9c8\uc774\uadf8\ub808\uc774\uc158\uc744 \uc0dd\uc131\ud569\ub2c8\ub2e4.\n<\/p>\n<pre>\n<code>Add-Migration InitialCreate<\/code>\n<code>Update-Database<\/code>\n<\/pre>\n<p>\n    \uc704\uc758 \uba85\ub839\uc5b4\ub97c \uc21c\uc11c\ub300\ub85c \uc2e4\ud589\ud558\uba74 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uac00 \uc0dd\uc131\ub418\uace0, \uc815\uc758\ud55c Product \ubaa8\ub378\uc5d0 \ub300\ud55c \ud14c\uc774\ube14\uc774 \uc0dd\uc131\ub429\ub2c8\ub2e4.\n<\/p>\n<h2>5. WPF UI \uad6c\uc131<\/h2>\n<p>\n    \uc774\uc81c \uc2e4\uc81c WPF \uc0ac\uc6a9\uc790 \uc778\ud130\ud398\uc774\uc2a4\ub97c \uad6c\uc131\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4. XAML \ud30c\uc77c\uc5d0\uc11c \ub370\uc774\ud130 \uc791\uc5c5\uc744 \uc704\ud55c \ubc84\ud2bc\uacfc \ub370\uc774\ud130 \ud45c\uc2dc\ub97c \uc704\ud55c \ub370\uc774\ud130 \uadf8\ub9ac\ub4dc(DataGrid)\ub97c \ucd94\uac00\ud569\ub2c8\ub2e4.\n<\/p>\n<pre>\n<code class=\"language-xml\">\n<window height=\"350\" title=\"CRUD Application\" width=\"525\" x:class=\"WpfApp.MainWindow\" xmlns=\"http:\/\/schemas.microsoft.com\/winfx\/2006\/xaml\/presentation\" xmlns:x=\"http:\/\/schemas.microsoft.com\/winfx\/2006\/xaml\">\n    <grid>\n        <datagrid autogeneratecolumns=\"False\" itemssource=\"{Binding Products}\" x:name=\"ProductsDataGrid\">\n            <datagrid.columns>\n                <datagridtextcolumn binding=\"{Binding Id}\" header=\"ID\"><\/datagridtextcolumn>\n                <datagridtextcolumn binding=\"{Binding Name}\" header=\"Name\"><\/datagridtextcolumn>\n                <datagridtextcolumn binding=\"{Binding Price}\" header=\"Price\"><\/datagridtextcolumn>\n            <\/datagrid.columns>\n        <\/datagrid>\n        <button click=\"AddButton_Click\" content=\"Add\"><\/button>\n        <button click=\"EditButton_Click\" content=\"Edit\"><\/button>\n        <button click=\"DeleteButton_Click\" content=\"Delete\"><\/button>\n    <\/grid>\n<\/window>\n<\/code>\n<\/pre>\n<h2>6. ViewModel \ubc0f \ub370\uc774\ud130 \ubc14\uc778\ub529<\/h2>\n<p>\n    MVVM(Model-View-ViewModel) \ud328\ud134\uc740 WPF \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc5d0\uc11c \ub110\ub9ac \uc0ac\uc6a9\ub429\ub2c8\ub2e4. ViewModel\uc744 \uc0ac\uc6a9\ud558\uc5ec \ubaa8\ub378\uacfc \ubdf0 \uac04\uc758 \ub370\uc774\ud130\ub97c \ubc14\uc778\ub529\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc544\ub798\ub294 ViewModel\uc744 \uc815\uc758\ud558\ub294 \ubc29\ubc95\uc785\ub2c8\ub2e4.\n<\/p>\n<pre>\n<code class=\"language-csharp\">\nusing System.Collections.ObjectModel;\n\npublic class ProductViewModel\n{\n    public ObservableCollection<product> Products { get; set; }\n\n    public ProductViewModel()\n    {\n        using (var context = new AppDbContext())\n        {\n            Products = new ObservableCollection<product>(context.Products.ToList());\n        }\n    }\n\n    public void AddProduct(Product product)\n    {\n        using (var context = new AppDbContext())\n        {\n            context.Products.Add(product);\n            context.SaveChanges();\n        }\n    }\n\n    public void EditProduct(Product product)\n    {\n        using (var context = new AppDbContext())\n        {\n            context.Products.Update(product);\n            context.SaveChanges();\n        }\n    }\n\n    public void DeleteProduct(int productId)\n    {\n        using (var context = new AppDbContext())\n        {\n            var product = context.Products.Find(productId);\n            if (product != null)\n            {\n                context.Products.Remove(product);\n                context.SaveChanges();\n            }\n        }\n    }\n}\n<\/product><\/product><\/code>\n<\/pre>\n<h2>7. CRUD \uc791\uc5c5 \uad6c\ud604<\/h2>\n<p>\n    \uc774\uc81c UI\uc640 ViewModel\uc744 \uc5f0\uacb0\ud558\uace0 CRUD \uc791\uc5c5\uc744 \uad6c\ud604\ud560 \uc900\ube44\uac00 \ub418\uc5c8\uc2b5\ub2c8\ub2e4. \ubc84\ud2bc \ud074\ub9ad \uc774\ubca4\ud2b8\uc5d0 CRUD \uba54\uc11c\ub4dc\ub97c \ud638\ucd9c\ud558\uba74 \ub429\ub2c8\ub2e4. \ub2e4\uc74c\uc740 \ubc84\ud2bc \ud074\ub9ad \uc774\ubca4\ud2b8\ub97c \uad6c\ud604\ud558\ub294 \ubc29\ubc95\uc785\ub2c8\ub2e4.\n<\/p>\n<pre>\n<code class=\"language-csharp\">\nprivate ProductViewModel viewModel;\n\npublic MainWindow()\n{\n    InitializeComponent();\n    viewModel = new ProductViewModel();\n    DataContext = viewModel;\n}\n\nprivate void AddButton_Click(object sender, RoutedEventArgs e)\n{\n    var newProduct = new Product\n    {\n        Name = \"New Product\",\n        Price = 9.99m\n    };\n    viewModel.AddProduct(newProduct);\n}\n\nprivate void EditButton_Click(object sender, RoutedEventArgs e)\n{\n    \/\/ Edit logic\n}\n\nprivate void DeleteButton_Click(object sender, RoutedEventArgs e)\n{\n    \/\/ Delete logic\n}\n<\/code>\n<\/pre>\n<h2>8. \ucd5c\uc801\ud654 \ubc0f \ub9c8\ubb34\ub9ac<\/h2>\n<p>\n    CRUD \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uc644\uc131\ud55c \ud6c4, \ucf54\ub4dc\uc758 \ucd5c\uc801\ud654 \ubc0f \uc548\uc815\uc131\uc744 \ub192\uc774\uae30 \uc704\ud574 \uc5d0\ub7ec \ud578\ub4e4\ub9c1 \ubc0f \uc720\ud6a8\uc131 \uac80\uc0ac \ub4f1\uc758 \ucd94\uac00 \uc791\uc5c5\uc744 \uace0\ub824\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub9e4\ubc88 \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uc811\uadfc \uc2dc\ub9c8\ub2e4 \uc0c8\ub85c\uc6b4 DbContext \uc778\uc2a4\ud134\uc2a4\ub97c \uc0dd\uc131\ud558\ub294 \uac83\uc740 \uc131\ub2a5\uc5d0 \uc601\ud5a5\uc744 \ubbf8\uce60 \uc218 \uc788\uc73c\ubbc0\ub85c, IoC(\uc81c\uc5b4\uc758 \uc5ed\uc804) \ub4f1\uc744 \ud1b5\ud55c \uc758\uc874\uc131 \uc8fc\uc785\uc744 \uace0\ub824\ud574\ubcfc \ud544\uc694\uac00 \uc788\uc2b5\ub2c8\ub2e4.\n<\/p>\n<p>\n    WPF\uc640 Entity Framework\ub97c \uc0ac\uc6a9\ud558\uc5ec CRUD \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \ub9cc\ub4dc\ub294 \uacfc\uc815\uc744 \uc0b4\ud3b4\ubcf4\uc558\uc2b5\ub2c8\ub2e4. \uc774 \uac15\uc88c\uc5d0\uc11c \uc124\uba85\ud55c \ub0b4\uc6a9\uc740 \ub2e8\uc21c\ud55c \uc608\uc2dc\uc5d0 \ubd88\uacfc\ud558\uba70, \uc2e4\uc81c \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc5d0\uc11c\ub294 \ub354 \uace0\uae09 \uae30\ub2a5\uacfc \uc544\ud0a4\ud14d\ucc98\ub97c \uace0\ub824\ud574\uc57c \ud560 \uac83\uc785\ub2c8\ub2e4.\n<\/p>\n<h2>9. \uacb0\ub860<\/h2>\n<p>\n    WPF \ubc0f Entity Framework\ub97c \uc0ac\uc6a9\ud558\ub294 \uae30\uc220\uc740 \uac15\ub825\ud558\uba70, \ub2e4\uc591\ud55c \ub370\uc774\ud130\ub97c \ucc98\ub9ac\ud558\ub294 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \ub9cc\ub4e4 \uc218 \uc788\ub294 \ub9e4\uc6b0 \uc720\uc6a9\ud55c \uc870\ud569\uc785\ub2c8\ub2e4. \ubcf8 \uac15\uc88c\ub97c \ud1b5\ud574 CRUD \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc758 \uae30\ubcf8 \uad6c\uc870\ub97c \uc774\ud574\ud558\uace0, \uc2e4\uc81c\ub85c WPF\uc640 Entity Framework\ub97c \ud65c\uc6a9\ud558\ub294 \ubc29\ubc95\uc744 \ubc30\uc6b0\ub294 \ub370 \ub3c4\uc6c0\uc774 \ub418\uc5c8\uae38 \ubc14\ub78d\ub2c8\ub2e4.\n<\/p>\n<p>\n    \uc55e\uc73c\ub85c \ub354 \ub098\uc544\uac00\uc5b4 \ubcf5\uc7a1\ud55c \ube44\uc988\ub2c8\uc2a4 \ub85c\uc9c1\uc744 \ucc98\ub9ac\ud558\uac70\ub098, \ub2e4\uc591\ud55c \uc0ac\uc6a9\uc790 \uc778\ud130\ud398\uc774\uc2a4\ub97c \uad6c\ucd95\ud558\uc5ec, \uc0ac\uc6a9\uc790 \uacbd\ud5d8\uc744 \ud5a5\uc0c1\uc2dc\ud0a4\ub294 \ub370\uc5d0\ub3c4 \ub9ce\uc740 \uc751\uc6a9\uc774 \uac00\ub2a5\ud560 \uac83\uc785\ub2c8\ub2e4.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Windows Presentation Foundation(WPF)\ub294 \ub9c8\uc774\ud06c\ub85c\uc18c\ud504\ud2b8\uc5d0\uc11c \uc81c\uacf5\ud558\ub294 UI \ud504\ub808\uc784\uc6cc\ud06c\ub85c, \ub370\uc2a4\ud06c\ud0d1 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uac1c\ubc1c\ud558\ub294 \ub370 \uc0ac\uc6a9\ub429\ub2c8\ub2e4. WPF\ub294 \uc0ac\uc6a9\uc790 \uc778\ud130\ud398\uc774\uc2a4(UI)\ub97c \uad6c\uc131\ud558\ub294 \ub370 \uc788\uc5b4 \uac15\ub825\ud55c \ub3c4\uad6c\ub97c \uc81c\uacf5\ud558\uba70, \ub2e4\uc591\ud55c \ub370\uc774\ud130 \ubc14\uc778\ub529 \ubc0f \uad00\uacc4\ud615 \ub370\uc774\ud130 \uc800\uc7a5\uc18c\uc640\uc758 \ud1b5\ud569\uc744 \uc27d\uac8c \ud560 \uc218 \uc788\uac8c \ud574\uc90d\ub2c8\ub2e4. \uc774 \uac15\uc88c\uc5d0\uc11c\ub294 Entity Framework\ub97c \uc0ac\uc6a9\ud558\uc5ec WPF \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc5d0\uc11c CRUD(\uc0dd\uc131, \uc77d\uae30, \uc218\uc815, \uc0ad\uc81c) \uc791\uc5c5\uc744 \uad6c\ud604\ud558\ub294 \ubc29\ubc95\uc744 \uc790\uc138\ud788 \uc124\uba85\ud569\ub2c8\ub2e4. 1. WPF \ubc0f Entity Framework &hellip; <a href=\"https:\/\/atmokpo.com\/w\/31301\/\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;WPF \uac15\uc88c, Entity Framework\uc640 WPF\ub97c \uc0ac\uc6a9\ud55c CRUD \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \ub9cc\ub4e4\uae30&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[39],"tags":[],"class_list":["post-31301","post","type-post","status-publish","format-standard","hentry","category-wpf-"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>WPF \uac15\uc88c, Entity Framework\uc640 WPF\ub97c \uc0ac\uc6a9\ud55c CRUD \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \ub9cc\ub4e4\uae30 - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/atmokpo.com\/w\/31301\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"WPF \uac15\uc88c, Entity Framework\uc640 WPF\ub97c \uc0ac\uc6a9\ud55c CRUD \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \ub9cc\ub4e4\uae30 - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"og:description\" content=\"Windows Presentation Foundation(WPF)\ub294 \ub9c8\uc774\ud06c\ub85c\uc18c\ud504\ud2b8\uc5d0\uc11c \uc81c\uacf5\ud558\ub294 UI \ud504\ub808\uc784\uc6cc\ud06c\ub85c, \ub370\uc2a4\ud06c\ud0d1 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uac1c\ubc1c\ud558\ub294 \ub370 \uc0ac\uc6a9\ub429\ub2c8\ub2e4. WPF\ub294 \uc0ac\uc6a9\uc790 \uc778\ud130\ud398\uc774\uc2a4(UI)\ub97c \uad6c\uc131\ud558\ub294 \ub370 \uc788\uc5b4 \uac15\ub825\ud55c \ub3c4\uad6c\ub97c \uc81c\uacf5\ud558\uba70, \ub2e4\uc591\ud55c \ub370\uc774\ud130 \ubc14\uc778\ub529 \ubc0f \uad00\uacc4\ud615 \ub370\uc774\ud130 \uc800\uc7a5\uc18c\uc640\uc758 \ud1b5\ud569\uc744 \uc27d\uac8c \ud560 \uc218 \uc788\uac8c \ud574\uc90d\ub2c8\ub2e4. \uc774 \uac15\uc88c\uc5d0\uc11c\ub294 Entity Framework\ub97c \uc0ac\uc6a9\ud558\uc5ec WPF \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc5d0\uc11c CRUD(\uc0dd\uc131, \uc77d\uae30, \uc218\uc815, \uc0ad\uc81c) \uc791\uc5c5\uc744 \uad6c\ud604\ud558\ub294 \ubc29\ubc95\uc744 \uc790\uc138\ud788 \uc124\uba85\ud569\ub2c8\ub2e4. 1. WPF \ubc0f Entity Framework &hellip; \ub354 \ubcf4\uae30 &quot;WPF \uac15\uc88c, Entity Framework\uc640 WPF\ub97c \uc0ac\uc6a9\ud55c CRUD \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \ub9cc\ub4e4\uae30&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/atmokpo.com\/w\/31301\/\" \/>\n<meta property=\"og:site_name\" content=\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"article:published_time\" content=\"2024-10-28T11:19:06+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-11-26T06:45:34+00:00\" \/>\n<meta name=\"author\" content=\"root\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@bebubo4\" \/>\n<meta name=\"twitter:site\" content=\"@bebubo4\" \/>\n<meta name=\"twitter:label1\" content=\"\uae00\uc4f4\uc774\" \/>\n\t<meta name=\"twitter:data1\" content=\"root\" \/>\n\t<meta name=\"twitter:label2\" content=\"\uc608\uc0c1 \ub418\ub294 \ud310\ub3c5 \uc2dc\uac04\" \/>\n\t<meta name=\"twitter:data2\" content=\"1\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/atmokpo.com\/w\/31301\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/31301\/\"},\"author\":{\"name\":\"root\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\"},\"headline\":\"WPF \uac15\uc88c, Entity Framework\uc640 WPF\ub97c \uc0ac\uc6a9\ud55c CRUD \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \ub9cc\ub4e4\uae30\",\"datePublished\":\"2024-10-28T11:19:06+00:00\",\"dateModified\":\"2024-11-26T06:45:34+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/atmokpo.com\/w\/31301\/\"},\"wordCount\":96,\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"articleSection\":[\"WPF \uac1c\ubc1c\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/atmokpo.com\/w\/31301\/\",\"url\":\"https:\/\/atmokpo.com\/w\/31301\/\",\"name\":\"WPF \uac15\uc88c, Entity Framework\uc640 WPF\ub97c \uc0ac\uc6a9\ud55c CRUD \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \ub9cc\ub4e4\uae30 - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#website\"},\"datePublished\":\"2024-10-28T11:19:06+00:00\",\"dateModified\":\"2024-11-26T06:45:34+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/atmokpo.com\/w\/31301\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/atmokpo.com\/w\/31301\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/atmokpo.com\/w\/31301\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\ud648\",\"item\":\"https:\/\/atmokpo.com\/w\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"WPF \uac15\uc88c, Entity Framework\uc640 WPF\ub97c \uc0ac\uc6a9\ud55c CRUD \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \ub9cc\ub4e4\uae30\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/atmokpo.com\/w\/#website\",\"url\":\"https:\/\/atmokpo.com\/w\/\",\"name\":\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/atmokpo.com\/w\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ko-KR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\",\"name\":\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"url\":\"https:\/\/atmokpo.com\/w\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png\",\"contentUrl\":\"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png\",\"width\":400,\"height\":400,\"caption\":\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\"},\"image\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/x.com\/bebubo4\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\",\"name\":\"root\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g\",\"caption\":\"root\"},\"sameAs\":[\"http:\/\/atmokpo.com\/w\"],\"url\":\"https:\/\/atmokpo.com\/w\/author\/root\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"WPF \uac15\uc88c, Entity Framework\uc640 WPF\ub97c \uc0ac\uc6a9\ud55c CRUD \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \ub9cc\ub4e4\uae30 - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/atmokpo.com\/w\/31301\/","og_locale":"ko_KR","og_type":"article","og_title":"WPF \uac15\uc88c, Entity Framework\uc640 WPF\ub97c \uc0ac\uc6a9\ud55c CRUD \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \ub9cc\ub4e4\uae30 - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","og_description":"Windows Presentation Foundation(WPF)\ub294 \ub9c8\uc774\ud06c\ub85c\uc18c\ud504\ud2b8\uc5d0\uc11c \uc81c\uacf5\ud558\ub294 UI \ud504\ub808\uc784\uc6cc\ud06c\ub85c, \ub370\uc2a4\ud06c\ud0d1 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uac1c\ubc1c\ud558\ub294 \ub370 \uc0ac\uc6a9\ub429\ub2c8\ub2e4. WPF\ub294 \uc0ac\uc6a9\uc790 \uc778\ud130\ud398\uc774\uc2a4(UI)\ub97c \uad6c\uc131\ud558\ub294 \ub370 \uc788\uc5b4 \uac15\ub825\ud55c \ub3c4\uad6c\ub97c \uc81c\uacf5\ud558\uba70, \ub2e4\uc591\ud55c \ub370\uc774\ud130 \ubc14\uc778\ub529 \ubc0f \uad00\uacc4\ud615 \ub370\uc774\ud130 \uc800\uc7a5\uc18c\uc640\uc758 \ud1b5\ud569\uc744 \uc27d\uac8c \ud560 \uc218 \uc788\uac8c \ud574\uc90d\ub2c8\ub2e4. \uc774 \uac15\uc88c\uc5d0\uc11c\ub294 Entity Framework\ub97c \uc0ac\uc6a9\ud558\uc5ec WPF \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc5d0\uc11c CRUD(\uc0dd\uc131, \uc77d\uae30, \uc218\uc815, \uc0ad\uc81c) \uc791\uc5c5\uc744 \uad6c\ud604\ud558\ub294 \ubc29\ubc95\uc744 \uc790\uc138\ud788 \uc124\uba85\ud569\ub2c8\ub2e4. 1. WPF \ubc0f Entity Framework &hellip; \ub354 \ubcf4\uae30 \"WPF \uac15\uc88c, Entity Framework\uc640 WPF\ub97c \uc0ac\uc6a9\ud55c CRUD \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \ub9cc\ub4e4\uae30\"","og_url":"https:\/\/atmokpo.com\/w\/31301\/","og_site_name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","article_published_time":"2024-10-28T11:19:06+00:00","article_modified_time":"2024-11-26T06:45:34+00:00","author":"root","twitter_card":"summary_large_image","twitter_creator":"@bebubo4","twitter_site":"@bebubo4","twitter_misc":{"\uae00\uc4f4\uc774":"root","\uc608\uc0c1 \ub418\ub294 \ud310\ub3c5 \uc2dc\uac04":"1\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/atmokpo.com\/w\/31301\/#article","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/31301\/"},"author":{"name":"root","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7"},"headline":"WPF \uac15\uc88c, Entity Framework\uc640 WPF\ub97c \uc0ac\uc6a9\ud55c CRUD \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \ub9cc\ub4e4\uae30","datePublished":"2024-10-28T11:19:06+00:00","dateModified":"2024-11-26T06:45:34+00:00","mainEntityOfPage":{"@id":"https:\/\/atmokpo.com\/w\/31301\/"},"wordCount":96,"publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"articleSection":["WPF \uac1c\ubc1c"],"inLanguage":"ko-KR"},{"@type":"WebPage","@id":"https:\/\/atmokpo.com\/w\/31301\/","url":"https:\/\/atmokpo.com\/w\/31301\/","name":"WPF \uac15\uc88c, Entity Framework\uc640 WPF\ub97c \uc0ac\uc6a9\ud55c CRUD \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \ub9cc\ub4e4\uae30 - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/#website"},"datePublished":"2024-10-28T11:19:06+00:00","dateModified":"2024-11-26T06:45:34+00:00","breadcrumb":{"@id":"https:\/\/atmokpo.com\/w\/31301\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/atmokpo.com\/w\/31301\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/atmokpo.com\/w\/31301\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\ud648","item":"https:\/\/atmokpo.com\/w\/en\/"},{"@type":"ListItem","position":2,"name":"WPF \uac15\uc88c, Entity Framework\uc640 WPF\ub97c \uc0ac\uc6a9\ud55c CRUD \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \ub9cc\ub4e4\uae30"}]},{"@type":"WebSite","@id":"https:\/\/atmokpo.com\/w\/#website","url":"https:\/\/atmokpo.com\/w\/","name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","description":"","publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/atmokpo.com\/w\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ko-KR"},{"@type":"Organization","@id":"https:\/\/atmokpo.com\/w\/#organization","name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","url":"https:\/\/atmokpo.com\/w\/","logo":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/","url":"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png","contentUrl":"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png","width":400,"height":400,"caption":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8"},"image":{"@id":"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/bebubo4"]},{"@type":"Person","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7","name":"root","image":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g","caption":"root"},"sameAs":["http:\/\/atmokpo.com\/w"],"url":"https:\/\/atmokpo.com\/w\/author\/root\/"}]}},"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/31301","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/comments?post=31301"}],"version-history":[{"count":1,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/31301\/revisions"}],"predecessor-version":[{"id":31302,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/31301\/revisions\/31302"}],"wp:attachment":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/media?parent=31301"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/categories?post=31301"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/tags?post=31301"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}