クラスライブラリからEntity FrameworkでSQL Serverにアクセスするとエラー発生


はじめに

Entity Frameworkを使ったデータ登録処理をクラスライブラリプロジェクトに置いてバッチとWebから使おうと思い、以下のようなメソッドを作成し、バッチ側から呼び出した。

データ登録処理
    public class Class1
    {
        public static void AddTest()
        {
            DataEntities e = new DataEntities();

            var b = new Book() { 
                //投入データ設定
            };
            e.Book.Add(b);
            e.SaveChanges();
        }
    }
起動側処理
    class Program
    {
        static void Main(string[] args)
        {
            Class1.AddTest();
        }
    }

エラー発生

すると以下のようなエラーが・・・

型 'System.InvalidOperationException' のハンドルされていない例外が mscorlib.dll で発生しました
追加情報:不変名が 'System.Data.SqlClient' の ADO.NET プロバイダーのアプリケーション構成ファイルに登録された Entity Framework プロバイダー型 'System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer' を読み込めませんでした。assembly-qualified 名が使用されていること、およびアセンブリを実行中のアプリケーションで使用できることを確認してください。詳細については、http://go.microsoft.com/fwlink/?LinkId=260882 を参照してください。

「'System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer' を読み込めませんでした。」とな・・・

原因

検索して以下のページに行き当たる。

Entity Framework Provider type could not be loaded?

曰く、EntityFramework.SqlServer.dllが無い事がエラーの原因らしく、Debugフォルダを確認すると確かに見当たらない。
記事を参考に1行追加して以下のように修正。

修正後データ登録処理
    public class Class1
    {
        public static void AddTest()
        {
            //◆追加
            var instance = System.Data.Entity.SqlServer.SqlProviderServices.Instance;

            DataEntities e = new DataEntities();

            var b = new Book() { 
                //投入データ設定
            };
            e.Book.Add(b);
            e.SaveChanges();
        }
    }

すると動くようになりました。
・・・イマイチ感ぱない。