web-dev-qa-db-ja.com

SQL Serverと通信するために、2016年に.Netに使用するORMはどれですか?

私のサーバーサイドでの経験のほとんどは、nodeJS meteorまたはRailsを使用しているので、まだ.Netの知識が豊富ではありません。InRails ActiveRecordは町で唯一のゲームであるため、ORM私のアプローチは、ORMを使用してすべてを照会し、ORMを使用できない場合は生のSQLにドロップダウンすることでした。

しかし、.Net 4.5以降のアプリでデータベースを照会するチュートリアルとレッスンを読みたいと思っていますが、将来の方向性について混乱しています。次のチュートリアルを見る

  • Linq Lambda構文
  • Linqクエリの構文
  • エンティティフレームワーク

最新の.netアプリに推奨されるORMは何ですか?上記のすべてで基本的なCRUD操作を実行できるようです。しかし、たとえばテーブル間の結合に適しているでしょうか? .netソリューションについては、Microsoft SQLサーバーデータベースに対してのみクエリを実行する予定です。

私が本当に混乱したのは、EFがlinqに取って代わり、その後EFもlinqを使用することを読むことです。したがって、過去または未来の構文を使用しているかどうかわからないすべての列を選択するという例を見るとき。また、コードを見るだけで、そのlinqかEFかはわかりません。ただし、クエリまたはラムダ構文かどうかはわかります。

13
ngnewb

あなたが言及したオプションはすべてのORMではありません。この3では、ORMはEFのみです。 .netには、次のような他の一般的なORMがあります。

  • NHibernate
  • LLBLGenプロ
  • ActiveRecord

それらのほとんどはLINQをサポートしています。 EntityFrameworkはより若いものですが、VSと統合されており、そのまま使用できるため、.netで最も人気のあるORMになり、LINQ自体ではなくLINQからEntitiesに置き換えられました。 msdnで定義されているLINQ(Language-Integrated Query)は、さまざまなデータソースで使用できます。

LINQは、強力なクエリ機能をC#の言語構文に拡張する一連の機能です。 LINQは、データのクエリと更新のための標準の簡単に学習できるパターンを導入し、潜在的にあらゆる種類のデータストアをサポートするように技術を拡張できます。 .NET Frameworkには、LINQを.NET Frameworkコレクション、SQL Serverデータベース、ADO.NETデータセット、およびXMLドキュメントで使用できるようにするLINQプロバイダーアセンブリが含まれています。

ほとんどがFluent構文とQuery構文として知られるLINQを使用する2つの異なる構文があります。

既に述べたように.netを初めて使用する場合は、流な構文でEFを使用することをお勧めします。これは、.netでデータベースのクエリを開始する最も早い方法です。

9
VahidNaderi

短い答えはEntity Frameworkです。

混乱を招くのは、Entity FrameworkでLinq LambdaおよびLinq Query構文を使用できることです。しかし、(私の意見では)将来はFluent APIです。

Entity Framework 7(プレリリース)を使用していますが、Fluent APIに焦点を当てているという印象を受けます。 Linq構文よりもずっと気に入っているので、これで問題ありません。

5
Clint B

Vegaをお試しください https://github.com/aadreja/vega 使い方は簡単で、多くのエキサイティングな機能を備えた最速の.net ORMの1つです。

開始する手順は次のとおりです。

1)Vega.EntityBaseから派生したEntityクラスを作成します例:-

[Table(NeedsHistory = true)]
public class Country : EntityBase
{
    [PrimaryKey(true)]
    public int Id { get; set; }
    public string Name { get; set; }
    public string ShortCode { get; set; }
}

2)CRUD操作を実行する

挿入-エンティティを作成し、挿入のプロパティを設定するだけです。接続オブジェクトを作成し、それをリポジトリに渡し、新しく作成したレコードのIDを返すAddメソッドを呼び出します

Country country = new Country()
    {
        Name = "India",
        ShortCode = "IN",
        CreatedBy = 1  //user id created record
    };

using (SqlConnection connection = new SqlConnection(conString))
{
     Repository<Country> countryRepo = new Repository<Country>(connection);
     int result = (int)countryRepo.Add(country);
}

更新-レコードを更新するには、リポジトリの更新メソッドを使用します

City city = new City()
{
    Id = 1,
    Name = "Ahmedabad",
    State = "GU",
    CountryId = 1,
    Longitude = 102.23m,
    Latitude = 124.23m,
    UpdatedBy = 1
};

using (SqlConnection con = new SqlConnection(connectionString))
{
     Repository<City> cityRepo = new Repository<City>(con);
     bool result = cityRepo.Update(city);
}

リストの読み取り-指定した条件ですべてのレコードを読み取り、リストに変換できる列挙可能なオブジェクトに変換します。

//read all records
using (SqlConnection con = new SqlConnection(connectionString))
{
     Repository<City> cityRepo = new Repository<City>(con);
     List<City> cityList  = cityRepo.ReadAll().ToList();
}

//read all with specified dynamic criteria
using (SqlConnection con = new SqlConnection(connectionString))
{
     Repository<City> cityRepo = new Repository<City>(con);
     List<City> cityList = cityRepo.ReadAll("Name=@Name", new { Name = "Ahmedabad" }).ToList(); //Dynamic criteria
}

https://github.com/aadreja/vega/wiki/Repository で詳細なドキュメントを参照してください

0
aadreja