我完成了我的 .NET MAUI 應用程式的編碼,并且在除錯模式下一切正常。Entity Framework Core for Xamarin 滿足了我所有的資料持久性需求,即使我在 .NET MAUI 上使用它。
我已經制作了 apk 檔案并正在對其進行測驗以查看是否一切正常,但事實證明并未創建資料庫。一旦我嘗試執行資料庫操作,我的應用程式就會崩潰。所以我不確定 EF Core 是否與 .NET MAUI 不兼容(但它在除錯中運行良好)或者我錯過了一些東西。
我按照這里訪問的教程https://docs.microsoft.com/en-us/ef/core/get-started/xamarin下面是我的 DataContext 檔案
資料背景關系.cs
using Microsoft.EntityFrameworkCore;
using MedbaseRec.Models;
namespace MedbaseRec.Utils
{
public class DataContext : DbContext
{
public DbSet<QuestionPack> QuestionPacks { get; set; }
public DbSet<Question> Questions { get; set; }
public DataContext()
{
SQLitePCL.Batteries_V2.Init();
Database.EnsureCreated();
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
string dbPath = Path.Combine(FileSystem.AppDataDirectory, "medbaseapplica.db3");
optionsBuilder.UseSqlite($"Filename={dbPath}");
}
}
}
uj5u.com熱心網友回復:
由于大量使用反射,Android/iOS 聯結器正在洗掉 Entity Framework Core / Sqlite 程式集的塊。您可以指示聯結器保留一些重要的 Entity Framework Core 內容,如下所示:
- 將一個名為 Linker.xml 的 XML 檔案添加到您的 Android 專案中。
- 在解決方案資源管理器中右鍵單擊 Linker.xml,然后選擇屬性。
- 將構建操作更改為 LinkDescription。
- 添加以下 XML:
<?xml version="1.0" encoding="utf-8" ?>
<linker>
<!-- Entity Framework Core -->
<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" />
<assembly fullname="Microsoft.EntityFrameworkCore" />
<assembly fullname="Microsoft.EntityFrameworkCore.Sqlite" />
<assembly fullname="Microsoft.EntityFrameworkCore.Relational" />
<assembly fullname="SQLitePCLRaw.core" />
<assembly fullname="SQLitePCLRaw.batteries_v2" />
<assembly fullname="SQLitePCLRaw.lib.e_sqlite3.android" />
</linker>
iOS 聯結器不同,它洗掉了物體框架所依賴的一些屬性。在這種情況下,您需要添加一個 iOS 特定的聯結器擴展:
<?xml version="1.0" encoding="utf-8" ?>
<linker>
<!-- Entity Framework Core -->
<assembly fullname="mscorlib">
<type fullname="System.String">
<method name="Compare"></method>
<method name="CompareTo"></method>
<method name="ToUpper"></method>
<method name="ToLower"></method>
</type>
<type fullname="System.Reflection.AssemblyInformationalVersionAttribute" preserve="all" />
</assembly>
<assembly fullname="System.Core" />
<assembly fullname="Microsoft.EntityFrameworkCore" />
<assembly fullname="Microsoft.EntityFrameworkCore.Sqlite" />
<assembly fullname="Microsoft.EntityFrameworkCore.Relational" />
<assembly fullname="SQLitePCLRaw.core" />
<assembly fullname="SQLitePCLRaw.batteries_v2" />
<assembly fullname="SQLitePCLRaw.lib.e_sqlite3.ios" />
</linker>
這已被驗證適用于 Microsoft.EntityFrameworkCore.Sqlite 版本 5.0.17。
LinkDescription XML 檔案在此處記錄。
uj5u.com熱心網友回復:
問題在于聯結器認為不需要我的 EntityFrameworkCore 依賴項。它作業得有點太好了。
我在 csproj 檔案中將其關閉,如下所示
<PropertyGroup>
<AndroidLinkMode>None</AndroidLinkMode>
</PropertyGroup>
但是,我確實認為我應該<AndroidLinkSkip>Assembly1</AndroidLinkSkip>確保程式集會被聯結器跳過并包含在發布版本中。
這是與 .NET MAUI 相關的 Xamarin 聯結器頁面的聯結器。 https://docs.microsoft.com/en-us/xamarin/android/deploy-test/linker
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/490798.html
