Xamarin で Entity Framework Core を利用するときの注意事項メモ
はじめに
Xamarin で Entity Framework Core を利用するときに、いくつかはまった事があったので、対応策のメモを記載しておきます。
Migration Tool
Xamarin のプロジェクトに対して、Entity Framework Core のマイグレーションツールの dotnet ef
コマンドを直接実行することができません。コンソールアプリケーションに Xamarin のプロジェクトを参照させて、コマンドを実行する必要があります。
.NET Core のコンソールアプリケーションをソリューションに追加し、コンソールアプリケーションの参照設定で、Xamarin のプロジェクトを追加します。
コンソールアプリケーションのプロジェクトのディレクトリで、dotnet ef
コマンドを実行してください。
dotnet ef migrations add [マイグレーションの名前] -p [DbContext を持つプロジェクトの csproj ファイル]
そうすると、マイグレーション関連のコードを生成することができます。
System.Buffuers 関連のビルドエラー
Android プロジェクトをビルドすると、以下のようなビルドエラーがでることがあります。
Can not resolve reference:
System.Buffers
, referenced bySystem.Memory
. Please add a NuGet package or assembly reference forSystem.Buffers
, or remove the reference toSystem.Memory
.
この場合は、System.Buffers
を NuGet を使ってインストールすると解決できます。
Linker の設定
Release ビルド時に、リンカーにより、使用 (または参照) されないアセンブリ、型、メンバーが破棄されので、Entity Framework Core が利用しているクラス類が破棄されないように、Linker の設定を行う必要があります。以下のような xml ファイルを iOS, Andorod のプロジェクトに追加して、ビルドアクションの設定を行う必要があります。
<?xml version="1.0" encoding="utf-8" ?>
<linker>
<assembly fullname="mscorlib">
<type fullname="System.String">
<method name="Compare"></method>
<method name="CompareTo"></method>
<method name="ToUpper"></method>
<method name="ToLower"></method>
</type>
</assembly>
<assembly fullname="System.Core">
<type fullname="System.Linq.Expressions.Expression`1"></type>
<type fullname="System.Linq.Queryable"></type>
</assembly>
</linker>
Visual Studio のビルドアクションで、[LinkDescription] の設定を行ってください。
SQLitePCL.Batteries_V2.Init()
の呼び出し
SQLite データベースを利用している場合は、アプリケーションの初期化時に、SQLitePCL.Batteries_V2.Init()
を呼び出す必要があります。
SQLitePCL.Batteries_V2.Init();
さいごに
GitHub の Issue に Entity Framework Core がうまく動かないときの回避策がまとめられています。こちらも定期的にウオッチしておくと良いかもしれません。