使用Android c#Cant的实体框架核心查找MigrateAsync

时间:2018-03-24 21:15:45

标签: c# android xamarin

我正在尝试使用.net c#xamrain中的类库为android创建一个实体框架示例,但我遇到的问题是我正在关注的一个例子。

 var dbFolder = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
 var fileName = "dbappoitnemtns.db";
 var dbFullPath = Path.Combine(dbFolder, fileName);
 try
   {
      using (var db = new BookingContext(dbFullPath))
      {
         await db.Database.MigrateAsync(); //We need to ensure the latest Migration was added. This is different than EnsureDatabaseCreated.

       Appointments _appTestDate1 = new Appointments() { Subject="Test Appointment           
     1",StarDate=DateTime.Now,EndDate=DateTime.Now.AddHours(2),isActive=true };                 

      }
      catch (Exception ex)
     {
           System.Diagnostics.Debug.WriteLine(ex.ToString());
      }

我遇到的问题是它无法找到MigrateAsync()我的上下文如下

using BookingDataAccess.Models;
using Microsoft.EntityFrameworkCore;

namespace BookDataContext
{
   public class BookingContext : DbContext
{
    public DbSet<Appointments> Appointment { get; set; }

    private string DatabasePath { get; set; }

    public BookingContext()
    {

    }

    public BookingContext(string databasePath)
    {
        DatabasePath = databasePath;
    }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlite($"Filename={DatabasePath}");
    }
 }
}

我的课程如下:我不知道我为什么找不到MirgrateAsync我使用以下软件包。

<ItemGroup>
    <PackageReference Include="Microsoft.EntityFrameworkCore">
      <Version>2.0.2</Version>
    </PackageReference>
    <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite.Core">
      <Version>2.0.2</Version>
    </PackageReference>
    <PackageReference Include="Xamarin.Android.Support.v7.AppCompat" Version="25.*" />
  </ItemGroup>

这是我的源代码,看看是否有人可以看到我在使用最新版本的ef core和sql lite的引用方面可能遗漏的任何内容。

此外,放置数据库创建代码的最佳做法可以在我遵循此示例的上下文中完成,该示例将其置于主要活动中,我不相信这是最适合它的地方。

我正在尝试按照这个一年前的例子,这也是我迁移的最佳方式。 https://blog.xamarin.com/building-android-apps-with-entity-framework/

这是我的全部来源,如果有人能够告诉我什么是错的,sql express 2016还有离线同步模式吗?我认为网络服务是最好的方式。

https://github.com/davidbuckleyni/andriodapp

1 个答案:

答案 0 :(得分:0)

  

我遇到的问题是它无法找到MigrateAsync()我的上下文如下

方法MigrateMigrateAsync存在于名为RelationalDatabaseFacadeExtensions的扩展程序中,其中包含Microsoft.EntityFrameworkCore

因此,您只需要导入此命名空间:

using Microsoft.EntityFrameworkCore;

namespace BookingApp{
    ...
}

然后你可以使用它。