2017-04-10 3 views
2

Microsoft.SQLServer.Typesでマイグレーションを作成するために、コードファーストのEntity Framework 6.0を取得しようとする際にいくつか問題があります。クラスライブラリ、Entity Frameworkコードファースト&Microsoft.SqlServer.Types

アセンブリ 'Microsoft.SqlServer.Types'バージョン10以降が見つかりませんでしたので、このプロバイダでは空間型と関数を使用できません。どこ

私は、彼らが実行しているの話を続ける見る:

global.asax
SqlServerTypes.Utilities.LoadNativeAssemblies(AppDomain.CurrentDomain.BaseDirectory); 

または類似。私はアプリケーションのデータ層を扱うクラスライブラリでこれを実行する必要があるので、スタートアップイベントはありません。

私は

[assembly: PreApplicationStartMethod(typeof(Test.Startup), "Start")] 
namespace Test 
{ 
    public class Startup 
    { 
     public static void Start() 
     { 
      SqlServerTypes.Utilities.LoadNativeAssemblies(AppDomain.CurrentDomain.BaseDirectory); 
     } 
    } 
} 

に入れてきた。しかし、それは何の効果もなかったです。誰も他のアイデアを持っていますか?

おかげ

クリス

答えて

5

ああ!私は先週この問題を抱えていました!

いくつかの点を明確にすることから始めましょう。このエラーは、Sqlサーバー空間型を管理するアセンブリがないために発生します。あなたは、いずれかの方法で、この問題を解決することができます:

  • NuGetパッケージの依存を取る機械
  • にSQL Serverをインストールします。

通常、NuGetパッケージを使用する方が簡単ですので、説明します。

NuGet packageのバージョンは、実行しているSql Serverのバージョンによって異なります。 SQL Serverの私のバージョンは11.0.6020.0ですので、11.0.2バージョンのNuGet packageをインストールしました。これは、バージョンと一致するようにスーパー重要です。

3つのアセンブリが必要です。

  1. Microsoft.SqlServer.Types.dll
  2. msvcr<Version>.dll
  3. SqlServerSpatial<Version>.dll

Microsoft.SqlServer.Types.dll他の2つはネイティブアセンブリであるがは、アセンブリを管理されています。

NuGetパッケージのの正しいバージョンをインストールした場合は、これらのすべてを処理する必要があります。

NuGetパッケージをインストールすると、readmeが開き、Loaderクラスを使用してネイティブアセンブリをロードする方法の例が示されます。

コードサンプル:

SqlServerTypes.Utilities.LoadNativeAssemblies(AppDomain.CurrentDomain.BaseDirectory); 

最後に、あなたはSqlProviderServices静的クラスでSqlServerTypesAssemblyNameプロパティをオーバーライドする必要があります。 注:EntityFrameworkのそれ以降のバージョンでのみ利用可能です。私はEntityFramework 6.1.3を使用しています。私の研究では、これは以前のバージョンでは利用できなかったという意見もありました。

もう一度、私は私のSQL Serverのバージョンに一致するように、バージョン11.0.2を使用していたので、私は、次のコードを使用:

SqlProviderServices.SqlServerTypesAssemblyName = "Microsoft.SqlServer.Types, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" 

SQL Serverの新しいバージョンを使用している場合は、あなたがする必要があります1112,13または14に置き換えることができます。

それは働いていない場合は、ここでは簡単なチェックリストです:

  • Microsoft.SqlServer.Types.dllが参照されていることを確認してください。
  • ネイティブアセンブリのが、..\SqlServerTypes\<Platform>\フォルダのbinディレクトリにコピーされていることを確認します。 と2つのが必要です。
  • LoadNativeAssembliesを呼び出すように設定し、DbContextインスタンスの作成を含むより前にSqlServerTypesAssemblyNameを設定していることを確認してください。
  • DbContextが実行アセンブリとは別のアセンブリにある場合、Microsoft.SqlServer.Typesアセンブリを参照する必要があります。ビルド/参照プロセスを介してコピーすることはできません。
+1

天才は、魅力的に働いた。おかげでクリス – ChrisB

関連する問題