2016-06-17 9 views
4

私はLinq to SQLを使って作業しています。私のアプリケーションとSQLサーバの間のブリッジとして機能する.dbmlファイルを追加することによって、私はちょうど.dbmlを使用せずにLinqを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)を使用してクエリする必要がある場合は、NOです。

クラスは、自動または手動のいずれかの場所で生成する必要があります(Entity Framework Code First Approach)。

しかし、コンテキストをすることができます魔法はありません持っているあなたは、独自のクラスを作成することができ、

ただし[あなたのケースで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クエリを書くことを学び始めました。

Customerという名前の1つのテーブルを持つデータベース "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という名前のコードファイルを追加します。そして、あなたはあなたの主な機能でLINQクエリの下に書くことができます

[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ツーSQLプロバイダにデータベースのスキーマに関するヒントを与えるいくつかの宣言型の属性であなたのPOCOクラスになります

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); 
     } 
+1

説明すると、System.Data.Linqアセンブリを参照する必要があります。 –

関連する問題