コードファーストアプローチ
本製品 からモデルを確認するもう1つの方法は、モデルクラスを記述することです。これは、Entity Framework におけるコードファーストアプローチで、アプリケーションで使用するデータモデルをより詳細に制御することができます。
Entity Framework のインストール
Entity Framework をインストールするか、選択したバージョンのEntity Framework で必要とされるアセンブリへの参照を追加します。Entity Framework 6 の使用については、EF 6の使用 を参照してください。本製品 に付属するすべてのアセンブリの詳細については、インストールされるアセンブリ を参照してください。
プロバイダーの登録
App.Config またはWeb.config に接続文字列を追加します。多くの場合、connectionStrings ノードはルート構成ノードのconfigSection ノードの直下にあります。
<configuration> ... <connectionStrings> <add name="MYOBContext" connectionString=" If using an online instance: InitiateOAuth=GETANDREFRESH;OAuthClientId=YourClientId;OAuthClientSecret=YourClientSecret;CompanyFileId=yourCompanyFileId;CallbackURL=http://localhost:33333;User=companyFileUser;Password=companyFilePassword; If using an on premise instance: InitiateOAuth=OFF;URL=http://localhost:8080/accountright;CompanyFileId=327eed10-9615-4e5e-bd9e-ae2cc00e2c70;User=companyFileUser;Password=companyFilePassword;" providerName="System.Data.CData.MYOB" /> </connectionStrings> ... </configuration>
コンテキストクラスの作成
最初に、MYOB コンテキストクラスを作成します。これは、DbContext を拡張し、データソース内のテーブルを示すDbSet プロパティを公開する基本オブジェクトです。次に、OnModelCreating メソッドをオーバーライドして、DbContext クラスの一部のデフォルト機能をオーバーライドします。次のコードでは、これらのプロパティについて説明しています。
C#
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
using System.Data.Entity.ModelConfiguration.Conventions;
class MYOBContext : DbContext {
public MYOBContext() { }
public DbSet<Accounts> Accounts { set; get; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// To remove the requests to the Migration History table
Database.SetInitializer<MYOBContext>(null);
// To remove the plural names
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
//For versions of EF before 6.0, uncomment the following line to remove calls to EdmTable, a metadata table
//modelBuilder.Conventions.Remove<IncludeMetadataConvention>();
//To remove the default schema "dbo"
modelBuilder.HasDefaultSchema("");
}
}
VB.NET
Imports System.Data.Entity
Imports System.Data.Entity.Infrastructure
Imports System.Data.Entity.ModelConfiguration.Conventions
Class MYOBContext
Inherits DbContext
Public Sub New()
End Sub
public property Accounts As DbSet(Of Accounts)
Protected Overrides Sub OnModelCreating(modelBuilder As DbModelBuilder)
' To remove the requests to the Migration History table
Database.SetInitializer(of MYOBContext)(Nothing)
' To remove the plural names
modelBuilder.Conventions.Remove(Of PluralizingTableNameConvention)
' For versions of EF before 6.0, uncomment the following line to remove calls to EdmTable, a metadata table
' modelBuilder.Conventions.Remove(Of IncludeMetadataConvention)()
' To remove the default schema "dbo"
modelBuilder.HasDefaultSchema("")
End Sub
End Class
テーブルモデルの作成
最後に、コンテキストクラスのDbSet プロパティで定義された各テーブルのクラスを定義します。テーブルクラスには、そのテーブルの各フィールドに対応するプロパティのリストが含まれている必要があります。テーブルクラスの各プロパティの属性を設定するには、対応するマップクラスを定義する必要があります。
C#
using System.Data.Entity.ModelConfiguration;
using System.ComponentModel.DataAnnotations.Schema; //EF 6 and later
//using System.ComponentModel.DataAnnotations //For versions of EF before 6
[System.ComponentModel.DataAnnotations.Schema.Table("Accounts")]
public class Accounts {
[System.ComponentModel.DataAnnotations.Key]
public System.String Id { get; set; }
public System.String Name { get; set; }
}
VB.NET
Imports System.Data.Entity.ModelConfiguration
Imports System.ComponentModel.DataAnnotations.Schema 'EF 6 and later
'Imports System.ComponentModel.DataAnnotations 'For versions of EF before 6
<System.ComponentModel.DataAnnotations.Schema.Table("Accounts")>
public class Accounts
<System.ComponentModel.DataAnnotations.Key>
public property Id As System.String
public property Name As System.String
End Class
コードでLINQ コマンドを実行する
これで、コードでLINQ を使用する準備が整いました。ファイルで必ず (c#)"using System.Linq"/(VB.Net)"Imports System.Linq" を宣言してください。
C#
MYOBContext ents = new MYOBContext();
var AccountsQuery = from Accounts in ents.Accounts
orderby Accounts.Name
select Accounts;
VB.Net
Dim ents As MYOBContext = New MYOBContext()
Dim AccountsQuery = From Accounts In ents.Accounts
Order By Accounts.Name
Select Accounts