Database First

Database First — создание объектной модели на основании существующей базы данных.

Создайте файл базы данных в проекте.
Создайте родительскую таблицу-справочник, которая должна содержать только уникальные записи и не допускать их повторений.
Скрыть

Показать

Копировать
  Script.sql  
/*РОДИТЕЛЬСКАЯ ТАБЛИЦА-СПРАВОЧНИК*/
--создание таблицы
IF NOT EXISTS(  
 SELECT name
 FROM sys.tables
 WHERE name = 'Author'
)
CREATE TABLE Author (
 IDAuthor INT NOT NULL PRIMARY KEY IDENTITY(1, 1), 
 Name NVARCHAR(50) NOT NULL, 
)
 
--вставляем данные
INSERT INTO Author(Name) VALUES
(N'Пушкин А.С.'),
(N'Лермонтов М.Ю.'),
(N'Гоголь Н.В.')
 
Создайте дочернюю таблицу.
Скрыть

Показать

Копировать
  Script.sql  
/*ДОЧЕРНЯЯ ТАБЛИЦА*/
--создание таблицы
IF NOT EXISTS(  
 SELECT name
 FROM sys.tables
 WHERE name = 'Book'
)
CREATE TABLE Book (
 IDBook INT NOT NULL PRIMARY KEY IDENTITY(1, 1),
 /*
 создание внешнего ключа, который ссылается
 на первичный ключ родительской таблицы
 */
 IDAuthor INT NOT NULL FOREIGN KEY REFERENCES Author(IDAuthor),
 Name NVARCHAR(1000) NOT NULL,
 Amount INT NOT NULL,
 Price MONEY NOT NULL
)
 
--вставляем данные
INSERT INTO Book(IDAuthor, Name, Amount, Price) VALUES
(3, N'Мертвые души', 5, 10.25),
(1, N'Дубровский', 10, 12.45),
(3, N'Вечера на хутрое', 15, 13.85),
(2, N'Мцыри', 20, 18.15),
(1, N'Онегин', 25, 21.70)
 
Создайте модель существующей базы данных. Add. New Item. Data. ADO.NET Entity Data Model.
Выберите EF Designer from database.
Выберите подключение к базе данных.
Выберите версию.
Выберите объекты, которые будут в модели.
Появился файл zzzModel.edmx и Visual Studio сгенерировала модель.
В файле, который имеет часть названия Context, (в нашем примере это zzzModel.Context.cs) находятся свойства с именами моделей, сгенерированных от таблиц, только во множественном числе.
В нашем примере это таблицы Author и Book, сгенерированные модели также имеют названия Author и Book, а свойства в файле zzzModel.Context.cs имеют те же названия, только во множественном числе
public virtual DbSet<Author> Authors { get; set; }
public virtual DbSet<Book> Books { get; set; }
 
Скрыть

Показать

Копировать
  Default.aspx  
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="_0001.Default" %>
 
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
 <meta charset="utf-8" />
 <title></title>
</head>
<body>
 <form id="form1" runat="server">
  <div>
   <asp:Label ID="Label1" runat="server" Text=""></asp:Label>
   <br />
   <br />
   <asp:Label ID="Label2" runat="server" Text=""></asp:Label>
  </div>
 </form>
</body>
</html>
 
Скрыть

Показать

Копировать
  Default.aspx.cs  
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
 
namespace _0001 {
 public partial class Default : System.Web.UI.Page {
  protected void Page_Load(object sender, EventArgs e) {
   //создаем экземпляр класса, который находится в файле,
   //имеющий в своем названии слово Context
   //в нашем примере это zzzModel.Context.cs
   var context = new zzzEntities();
 
   //вывод данных
   foreach(var i in context.Books) {
    Label1.Text += i.Name.ToString() + " " + i.Amount.ToString() + " " + Convert.ToString(string.Format("{0:f2}", i.Price)) + "<br />";
   }
 
   //объединение и вывод данных двух таблиц
   var query = 
   from val1 in context.Books
   join val2 in context.Authors on val1.IDAuthor equals val2.IDAuthor
   select new { nameBook = val1.Name, nameAuthor = val2.Name, amount = val1.Amount, price = val1.Price }; 
   foreach(var i in query) {
    Label2.Text += i.nameBook.ToString() + " " + i.nameAuthor.ToString() + " " + i.amount.ToString() + " " + Convert.ToString(string.Format("{0:f2}", i.price)) + "<br />";
   }
  }
 }
}