2016-06-17 2 views
4

나는 내 응용 프로그램과 SQL 서버 사이에서 다리 역할을하면 .dbml 파일을 추가하여 항상 SQL Linq에와 협력하고, 내가하면 .dbml를 사용하지 않고 LINQ to SQL은을 사용할 수있는 방법이 있는지 그냥 궁금 해요 파일? 나는 똑같이 Link here을 우연히 발견했다. 그러나 그것은 당연히 이해할 수 없다..dbml 파일을 추가하지 않고 Linq를 SQL에 사용할 수있는 방법이 있습니까?

+1

[this] (http://stackoverflow.com/questions/31425715/how-to-use-linq-to-sql-without-having-to-generate-all-the-classes)에서 제안 된 해결책을 의미합니까?) 그래서 질문? –

+1

* Link *에서 언급 된 접근법은 DB 테이블의 속성을 수동으로 작성하여 DBML 파일을 사용하는 것과 동일한 접근 방식을 취하는 것에 더 가깝습니다. 유일한 차이점. 우리는 .DBML 파일을 자동으로 만들도록 드래그 앤 드롭하지 않습니다. – Lucky

+0

참고로,이 [링크] (http://forums.asp.net/t/1465242.aspx?Can+you+use+Linq+without+DBML+file+)에서 더 많은 것을 찾을 수 있습니다. –

답변

2

컨텍스트의 속성 (context.TableName)을 사용하여 쿼리해야하는 경우 아니오입니다.

당신은, 어떤 장소에서 생성 된 클래스를 자동 또는 수동으로 (엔티티 프레임 워크 코드 첫 번째 접근) 할 필요가있다.

그러나 문맥을 할 수 있습니다 마법이 없다가 당신은 당신의 자신의 클래스를 만들 수

그러나 [ 귀하의 경우에 DBML의 일부입니다 ] 생성 된 클래스 파일 (들)이없는 모든 테이블 TableAttribute을 사용하십시오. 이것은 dbml이하는 일을 수동으로 복제 한 것입니다. 이 부분을 확인하려면 link을 참조하십시오.

위의 링크의 일부 예 :

[Table] 
public class Customer 
{ 
    [Column(IsPrimaryKey=true)] 
    public int ID; 
    [Column]      
    public string Name; 
} 

public class DemoDataContext : DataContext 
{ 
    public DemoDataContext (string cxString) : base (cxString) { } 

    public Table<Customer> Customers { get { return GetTable<Customer>(); } } 
    public Table<Purchase> Purchases { get { return GetTable<Purchase>(); } } 
} 

사용법 : 물론

var db = new DataContext(); 
var customers = db.GetTable<Customer>(); 
var query = customers.Where (c => c.Name.StartsWith ("a")); 
5

예. 사실 LINQ-to-SQL을 처음 배울 때 dbml 파일의 보일러 - 플레이트에 의한 자동 생성 코드는 사실 처음에는 너무 많은 부분을 소화 할 수 없었습니다. 그래서 저는 POCO 클래스를 하나씩 차례로 꾸미기 시작했고 LINQ 쿼리를 작성하는 법을 배우기 시작했습니다. 여기서 얻을 수있는 빠른 샘플이 당신의 시작 :

나는 하나 개의 테이블라는 이름의 고객이있는 데이터베이스 "businessLinqToSql"를 만들었습니다. 아래에서 언급 한 SQL 스크립트를 사용하십시오.

USE [businessLinqToSql] 
GO 

/****** Object: Table [dbo].[Customer] Script Date: 06/17/2016 11:28:05 ******/ 
SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

CREATE TABLE [dbo].[Customer](
    [ID] [int] NOT NULL, 
    [Name] [nchar](30) NOT NULL, 
    [Address] [nchar](30) NULL, 
CONSTRAINT [PK_Customer] PRIMARY KEY CLUSTERED 
(
    [ID] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

GO 

C# 콘솔 응용 프로그램을 만들고 아래 코드와 같이 Customer.cs라는 코드 파일을 추가하십시오.

[Table(Name="Customer")] 
public class Customer 
{ 

    [Column(IsPrimaryKey = true)] 
    public int ID { get; set; } 

    [Column] 
    public string Name { get; set; } 

    [Column] 
    public string Address { get; set; } 

} 

그런 다음 당신이 당신의 주요 기능에 LINQ 쿼리 아래 작성할 수 있습니다 :

private static void LinqToSql() 
     { 
      DataContext dataContext = new DataContext("data source=.;initial catalog=businessLinqToSql;integrated security=True;MultipleActiveResultSets=True"); 
      Table<Customer> customers = dataContext.GetTable<Customer>(); 

      IQueryable<string> query = from c in customers 
             where c.Name.Length > 5 
             orderby c.Name.Length 
             select c.Name.ToUpper(); 
      foreach (string name in query) Console.WriteLine(name); 
     } 
그것은 LINQ - 투 - SQL 공급자에 대한 데이터베이스 스키마에 대한 힌트를 제공합니다 일부 선언적 특성을 사용하여 POCO 클래스 될 것입니다
+1

언급 할만한 가치가 있으면 System.Data.Linq 어셈블리를 참조해야합니다. –

관련 문제