160527 Entity Framework db first 테스트

Edit

개요

  • entity framework의 가장 실용적인 샘플은 무엇일까?
    • EF DB first
  • EF DB first 상세내용
    • DB, 테이블 생성은 sql을 직접 사용해서 만들고,
    • ADO.NET entities (=edmx파일) 자동생성 기능으로 Context 클래스 자동생성하여,
    • SELECT, UPDATE, INSERT, DELETE 해결!
  • 아래는 EF DB first 의 zero base에서의 샘플
    • 로컬 SQL Server에서 DB, 테이블 생성
    • 콘솔어플리케이션 클라이언트로 구현방식 기술




샘플 프로젝트 다운로드





클라이언트 프로젝트 생성 (zoro base C# console application)

zoro base C# console application 생성




DB, 테이블 생성 (CREATE DATABASE, CREATE TABLE)

  • sql 파일 생성후 프로젝트에 추가
    • 이 파일에서 CREATE DATABASE, CREATE TABLE를 할것임.
  • sql 코딩을 하기전에 SQL Server에 연결
    • SQL Server를 외부서버나 Azure서버등 외부 SQL Server에 연결할 수 있지만 여기서는 로컬 SQL Server 인스턴스를 선택함.
  • 이렇게 선택된 SQL Server위에 DB, 테이블을 생성함.
    • sql 파일에 직접 sql 코딩을 함.
    • 실제로 실행함…
<create-tables.sql>
SELECT @@VERSION
SELECT @@SERVERNAME
EXEC sp_databases

USE tempdb

IF (EXISTS(SELECT name 
FROM master.dbo.sysdatabases
WHERE name = 'mydb'))
    BEGIN
    PRINT 'mydb is existed!'
    DROP DATABASE mydb
    END
ELSE
    PRINT 'mydb is not existed!'

CREATE DATABASE mydb
USE mydb
SELECT DB_NAME()

CREATE TABLE [dbo].[Course] (
    [CourseID]  INT           IDENTITY (1, 1) NOT NULL,
    [Title]     NVARCHAR (50) NULL,
    [Credits]   INT           NULL,
    [Credits2]  INT           NULL,
    PRIMARY KEY CLUSTERED ([CourseID] ASC)
)

CREATE TABLE [dbo].[Student] (
    [StudentID]      INT           IDENTITY (1, 1) NOT NULL,
    [LastName]       NVARCHAR (50) NULL,
    [FirstName]      NVARCHAR (50) NULL,
    [EnrollmentDate] DATETIME      NULL,
    PRIMARY KEY CLUSTERED ([StudentID] ASC)
)

SELECT * FROM information_schema.tables




EF 참조추가

PM> install-package EntityFramework




EDMX 파일 생성 (Entity Data Model)

  • 새아이템 추가 > Entity Data Model
  • EF designer from DB 선택
  • 서버이름, DB이름을 지정
    • 서버이름은 정확하게 localhost\myinst 처럼 타이핑해서 입력
    • db이름은 자동조회 되므로 드롭다운해서 mydb 를 선택
    • connection string은 app.config에 입력하지 않을건데 나중에 하드코딩해 줄거임.
  • connection string 을 작성
    • SQL 서버 탐색기에서 복사해도 되지만
    • 그냥 간단하게 아래 자동생성된 컨텍스트 코드에서 Data Source, Initial Catalog 부분만 변경해도 된다.
public partial class Entities : DbContext
{
    public Entities()
        : base(
        @"
        Data Source=HHDX1CARBON\MYINST;
        Initial Catalog=mydb;
        Integrated Security=True;
        Connect Timeout=15;
        Encrypt=False;
        TrustServerCertificate=True;
        ApplicationIntent=ReadWrite;
        MultiSubnetFailover=False
        ")
    {
    }




클라이언트 코딩 (SELECT, INSERT, DELETE, UPDATE)

  • 자동 생성된 Context 클래스인 Entities를 이용하여 Linq를 사용하여 SELECT, INSERT, DELETE, UPDATE 를 수행할 수 있다.
class Program
{
    static void Main(string[] args)
    {
        using (var context = new Entities())
        {
            context.Database.Log += (log) =>
            {
                Console.WriteLine($"log : {log}");
            };

            context.Student.Add(new Student
            {
                LastName = "황",
                FirstName = "현동",
                EnrollmentDate = DateTime.Now
            });

            context.SaveChanges();

            var list = context.Student.ToList();
        }
    }
}




%23%20160527%20Entity%20Framework%20db%20first%20%uD14C%uC2A4%uD2B8%0A%0A@%28%uD669%uD604%uB3D9%20%uB178%uD2B8%uBD81%29%5B.net%2C%20c%23%2C%20ef%2C%20entityframework%2C%20db%2C%20database%2C%20mssql%2C%20sqlserver%5D%0A%0A%5Btoc%5D%0A%0A%3Cbr/%3E%0A%3Cbr/%3E%0A%3Cbr/%3E%0A%0A%23%23%20%uAC1C%uC694%0A%0A-%20entity%20framework%uC758%20%uAC00%uC7A5%20%uC2E4%uC6A9%uC801%uC778%20%uC0D8%uD50C%uC740%20%uBB34%uC5C7%uC77C%uAE4C%3F%0A%20%20%20%20-%20EF%20DB%20first%0A-%20EF%20DB%20first%20%uC0C1%uC138%uB0B4%uC6A9%0A%20%20%20%20-%20DB%2C%20%uD14C%uC774%uBE14%20%uC0DD%uC131%uC740%20sql%uC744%20%uC9C1%uC811%20%uC0AC%uC6A9%uD574%uC11C%20%uB9CC%uB4E4%uACE0%2C%0A%20%20%20%20-%20ADO.NET%20entities%20%28%3Dedmx%uD30C%uC77C%29%20%uC790%uB3D9%uC0DD%uC131%20%uAE30%uB2A5%uC73C%uB85C%20Context%20%uD074%uB798%uC2A4%20%uC790%uB3D9%uC0DD%uC131%uD558%uC5EC%2C%0A%20%20%20%20-%20SELECT%2C%20UPDATE%2C%20INSERT%2C%20DELETE%20%uD574%uACB0%21%0A-%20%uC544%uB798%uB294%20EF%20DB%20first%20%uC758%20zero%20base%uC5D0%uC11C%uC758%20%uC0D8%uD50C%20%0A%20%20%20%20-%20%uB85C%uCEEC%20SQL%20Server%uC5D0%uC11C%20DB%2C%20%uD14C%uC774%uBE14%20%uC0DD%uC131%0A%20%20%20%20-%20%uCF58%uC194%uC5B4%uD50C%uB9AC%uCF00%uC774%uC158%20%uD074%uB77C%uC774%uC5B8%uD2B8%uB85C%20%uAD6C%uD604%uBC29%uC2DD%20%uAE30%uC220%0A%0A%3Cbr/%3E%0A%3Cbr/%3E%0A%3Cbr/%3E%0A%0A%23%23%20%uAD00%uB828%uB9C1%uD06C%0A%0Ahttps%3A//www.asp.net/mvc/overview/getting-started/database-first-development/setting-up-database%0Ahttps%3A//www.asp.net/mvc/overview/getting-started/database-first-development/creating-the-web-application%0Ahttps%3A//www.asp.net/mvc/overview/getting-started/database-first-development/changing-the-database%0A%0A%3Cbr/%3E%0A%3Cbr/%3E%0A%3Cbr/%3E%0A%0A%23%23%20%uC0D8%uD50C%20%uD504%uB85C%uC81D%uD2B8%20%uB2E4%uC6B4%uB85C%uB4DC%20%0A%0A%3E%20https%3A//github.com/HyundongHwang/MyEfDbFirstTest%0A%0A%3Cbr/%3E%0A%3Cbr/%3E%0A%3Cbr/%3E%0A%0A%23%23%20%uD074%uB77C%uC774%uC5B8%uD2B8%20%uD504%uB85C%uC81D%uD2B8%20%uC0DD%uC131%20%28zoro%20base%20C%23%20console%20application%29%0A%3E%20zoro%20base%20C%23%20console%20application%20%uC0DD%uC131%0A%0A%3Cbr/%3E%0A%3Cbr/%3E%0A%3Cbr/%3E%0A%0A%23%23%20DB%2C%20%uD14C%uC774%uBE14%20%uC0DD%uC131%20%28CREATE%20DATABASE%2C%20CREATE%20TABLE%29%0A-%20sql%20%uD30C%uC77C%20%uC0DD%uC131%uD6C4%20%uD504%uB85C%uC81D%uD2B8%uC5D0%20%uCD94%uAC00%0A%20%20%20%20-%20%uC774%20%uD30C%uC77C%uC5D0%uC11C%20CREATE%20DATABASE%2C%20CREATE%20TABLE%uB97C%20%uD560%uAC83%uC784.%0A-%20sql%20%uCF54%uB529%uC744%20%uD558%uAE30%uC804%uC5D0%20SQL%20Server%uC5D0%20%uC5F0%uACB0%0A%20%20%20%20-%20SQL%20Server%uB97C%20%uC678%uBD80%uC11C%uBC84%uB098%20Azure%uC11C%uBC84%uB4F1%20%uC678%uBD80%20SQL%20Server%uC5D0%20%uC5F0%uACB0%uD560%20%uC218%20%uC788%uC9C0%uB9CC%20%uC5EC%uAE30%uC11C%uB294%20%uB85C%uCEEC%20SQL%20Server%20%uC778%uC2A4%uD134%uC2A4%uB97C%20%uC120%uD0DD%uD568.%0A%20%20%20%20-%20%21%5BAlt%20text%5D%28./1465363803745.png%29%0A-%20%uC774%uB807%uAC8C%20%uC120%uD0DD%uB41C%20SQL%20Server%uC704%uC5D0%20DB%2C%20%uD14C%uC774%uBE14%uC744%20%uC0DD%uC131%uD568.%0A%20%20%20%20-%20sql%20%uD30C%uC77C%uC5D0%20%uC9C1%uC811%20sql%20%uCF54%uB529%uC744%20%uD568.%0A%20%20%20%20-%20%uC2E4%uC81C%uB85C%20%uC2E4%uD589%uD568...%0A%20%20%20%20%0A%3Ccreate-tables.sql%3E%0A%60%60%60sql%0ASELECT%20@@VERSION%0ASELECT%20@@SERVERNAME%0AEXEC%20sp_databases%0A%0AUSE%20tempdb%0A%0AIF%20%28EXISTS%28SELECT%20name%20%0AFROM%20master.dbo.sysdatabases%0AWHERE%20name%20%3D%20%27mydb%27%29%29%0A%20%20%20%20BEGIN%0A%20%20%20%20PRINT%20%27mydb%20is%20existed%21%27%0A%20%20%20%20DROP%20DATABASE%20mydb%0A%20%20%20%20END%0AELSE%0A%20%20%20%20PRINT%20%27mydb%20is%20not%20existed%21%27%0A%0ACREATE%20DATABASE%20mydb%0AUSE%20mydb%0ASELECT%20DB_NAME%28%29%0A%0ACREATE%20TABLE%20%5Bdbo%5D.%5BCourse%5D%20%28%0A%20%20%20%20%5BCourseID%5D%20%20INT%20%20%20%20%20%20%20%20%20%20%20IDENTITY%20%281%2C%201%29%20NOT%20NULL%2C%0A%20%20%20%20%5BTitle%5D%20%20%20%20%20NVARCHAR%20%2850%29%20NULL%2C%0A%20%20%20%20%5BCredits%5D%20%20%20INT%20%20%20%20%20%20%20%20%20%20%20NULL%2C%0A%20%20%20%20%5BCredits2%5D%20%20INT%20%20%20%20%20%20%20%20%20%20%20NULL%2C%0A%20%20%20%20PRIMARY%20KEY%20CLUSTERED%20%28%5BCourseID%5D%20ASC%29%0A%29%0A%0ACREATE%20TABLE%20%5Bdbo%5D.%5BStudent%5D%20%28%0A%20%20%20%20%5BStudentID%5D%20%20%20%20%20%20INT%20%20%20%20%20%20%20%20%20%20%20IDENTITY%20%281%2C%201%29%20NOT%20NULL%2C%0A%20%20%20%20%5BLastName%5D%20%20%20%20%20%20%20NVARCHAR%20%2850%29%20NULL%2C%0A%20%20%20%20%5BFirstName%5D%20%20%20%20%20%20NVARCHAR%20%2850%29%20NULL%2C%0A%20%20%20%20%5BEnrollmentDate%5D%20DATETIME%20%20%20%20%20%20NULL%2C%0A%20%20%20%20PRIMARY%20KEY%20CLUSTERED%20%28%5BStudentID%5D%20ASC%29%0A%29%0A%0ASELECT%20*%20FROM%20information_schema.tables%0A%60%60%60%0A%0A%3Cbr/%3E%0A%3Cbr/%3E%0A%3Cbr/%3E%0A%0A%23%23%20EF%20%uCC38%uC870%uCD94%uAC00%0A%60%60%60powershell%0APM%3E%20install-package%20EntityFramework%0A%60%60%60%0A%0A%3Cbr/%3E%0A%3Cbr/%3E%0A%3Cbr/%3E%0A%0A%23%23%20EDMX%20%uD30C%uC77C%20%uC0DD%uC131%20%28Entity%20Data%20Model%29%0A-%20%uC0C8%uC544%uC774%uD15C%20%uCD94%uAC00%20%3E%20Entity%20Data%20Model%20%0A%20%20%20%20-%20%21%5BAlt%20text%5D%28./1465365961870.png%29%0A-%20EF%20designer%20from%20DB%20%uC120%uD0DD%0A%20%20%20%20-%20%21%5BAlt%20text%5D%28./1465366009366.png%29%0A-%20%uC11C%uBC84%uC774%uB984%2C%20DB%uC774%uB984%uC744%20%uC9C0%uC815%0A%20%20%20%20-%20%uC11C%uBC84%uC774%uB984%uC740%20%uC815%uD655%uD558%uAC8C%20%60localhost%5Cmyinst%60%20%uCC98%uB7FC%20%uD0C0%uC774%uD551%uD574%uC11C%20%uC785%uB825%0A%20%20%20%20-%20db%uC774%uB984%uC740%20%uC790%uB3D9%uC870%uD68C%20%uB418%uBBC0%uB85C%20%uB4DC%uB86D%uB2E4%uC6B4%uD574%uC11C%20%60mydb%60%20%uB97C%20%uC120%uD0DD%0A%20%20%20%20-%20connection%20string%uC740%20app.config%uC5D0%20%uC785%uB825%uD558%uC9C0%20%uC54A%uC744%uAC74%uB370%20%uB098%uC911%uC5D0%20%uD558%uB4DC%uCF54%uB529%uD574%20%uC904%uAC70%uC784.%0A%20%20%20%20-%20%21%5BAlt%20text%5D%28./1465366180421.png%29%0A%20%20%20%20-%20%21%5BAlt%20text%5D%28./1465366186772.png%29%0A-%20connection%20string%20%uC744%20%uC791%uC131%0A%20%20%20%20-%20SQL%20%uC11C%uBC84%20%uD0D0%uC0C9%uAE30%uC5D0%uC11C%20%uBCF5%uC0AC%uD574%uB3C4%20%uB418%uC9C0%uB9CC%0A%20%20%20%20-%20%uADF8%uB0E5%20%uAC04%uB2E8%uD558%uAC8C%20%uC544%uB798%20%uC790%uB3D9%uC0DD%uC131%uB41C%20%uCEE8%uD14D%uC2A4%uD2B8%20%uCF54%uB4DC%uC5D0%uC11C%20Data%20Source%2C%20Initial%20Catalog%20%uBD80%uBD84%uB9CC%20%uBCC0%uACBD%uD574%uB3C4%20%uB41C%uB2E4.%0A%60%60%60c%23%0Apublic%20partial%20class%20Entities%20%3A%20DbContext%0A%7B%0A%20%20%20%20public%20Entities%28%29%0A%20%20%20%20%20%20%20%20%3A%20base%28%0A%20%20%20%20%20%20%20%20@%22%0A%20%20%20%20%20%20%20%20Data%20Source%3DHHDX1CARBON%5CMYINST%3B%0A%20%20%20%20%20%20%20%20Initial%20Catalog%3Dmydb%3B%0A%20%20%20%20%20%20%20%20Integrated%20Security%3DTrue%3B%0A%20%20%20%20%20%20%20%20Connect%20Timeout%3D15%3B%0A%20%20%20%20%20%20%20%20Encrypt%3DFalse%3B%0A%20%20%20%20%20%20%20%20TrustServerCertificate%3DTrue%3B%0A%20%20%20%20%20%20%20%20ApplicationIntent%3DReadWrite%3B%0A%20%20%20%20%20%20%20%20MultiSubnetFailover%3DFalse%0A%20%20%20%20%20%20%20%20%22%29%0A%20%20%20%20%7B%0A%20%20%20%20%7D%0A%60%60%60%0A%0A%3Cbr/%3E%0A%3Cbr/%3E%0A%3Cbr/%3E%0A%0A%23%23%20%uD074%uB77C%uC774%uC5B8%uD2B8%20%uCF54%uB529%20%28SELECT%2C%20INSERT%2C%20DELETE%2C%20UPDATE%29%0A%0A%3E%20-%20%uC790%uB3D9%20%uC0DD%uC131%uB41C%20Context%20%uD074%uB798%uC2A4%uC778%20Entities%uB97C%20%uC774%uC6A9%uD558%uC5EC%20Linq%uB97C%20%uC0AC%uC6A9%uD558%uC5EC%20SELECT%2C%20INSERT%2C%20DELETE%2C%20UPDATE%20%uB97C%20%uC218%uD589%uD560%20%uC218%20%uC788%uB2E4.%0A%0A%60%60%60c%23%0Aclass%20Program%0A%7B%0A%20%20%20%20static%20void%20Main%28string%5B%5D%20args%29%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20using%20%28var%20context%20%3D%20new%20Entities%28%29%29%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20context.Database.Log%20+%3D%20%28log%29%20%3D%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Console.WriteLine%28%24%22log%20%3A%20%7Blog%7D%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20context.Student.Add%28new%20Student%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20LastName%20%3D%20%22%uD669%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20FirstName%20%3D%20%22%uD604%uB3D9%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20EnrollmentDate%20%3D%20DateTime.Now%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%29%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20context.SaveChanges%28%29%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20list%20%3D%20context.Student.ToList%28%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%7D%0A%60%60%60%0A%0A%3Cbr/%3E%0A%3Cbr/%3E%0A%3Cbr/%3E

이 글은 Evernote에서 작성되었습니다. Evernote는 하나의 업무 공간입니다. Evernote를 다운로드하세요.

댓글