Entity Framework Core - EF Core 2.2 - Point.Boundary относится к типу интерфейса (IGeometry).

Я пробую новую функциональность в EF Core 2.2. Это основано на следующей статье. «Объявление Entity Framework Core 2.2» https://blogs.msdn.microsoft.com/dotnet/2018/12/04/announcing-entity-framework-core-2-2/

Я установил следующий пакет Nuget.

введите описание изображения здесь

Я добавил в свою модель следующее.

using NetTopologySuite.Geometries;


//New as of EF.Core 2.2 
//[Required] 
//[NotMapped] 
public Point Location { get; set; }

введите описание изображения здесь

Во время запуска приложения я получаю следующую ошибку в контексте моей базы данных в следующей строке: Database.EnsureCreated ();

введите описание изображения здесь

System.InvalidOperationException HResult = 0x80131509 Message = Свойство Point.Boundary относится к типу интерфейса (IGeometry). Если это свойство навигации, вручную настройте связь для этого свойства, приведя его к сопоставленному типу сущности, в противном случае игнорируйте свойство, используя NotMappedAttribute или EntityTypeBuilder.Ignore в OnModelCreating. Источник = Microsoft.EntityFrameworkCore


person Lek Pio    schedule 09.12.2018    source источник
comment
У меня тоже такая проблема. .net ядро ​​2.2 с ядром фреймворка 2.2. Я получаю сообщение об ошибке при запуске надстройки-миграции   -  person Kyle    schedule 11.12.2018


Ответы (2)


Вам нужно позвонить UseNetTopologySuite(). Пример здесь:

public class ApplicationDbContext : IdentityDbContext
{
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
        : base(options)
    {

    }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        IConfigurationRoot configuration = new ConfigurationBuilder()
           .SetBasePath(Directory.GetCurrentDirectory())
           .AddJsonFile("appsettings.json")
           .Build();
        var connectionString = configuration.GetConnectionString("DefaultConnection");
        optionsBuilder.UseSqlServer(connectionString, opts => opts.UseNetTopologySuite());
    }
    public DbSet<Test> Tests { get; set; }
}


public class Test
{
    public int Id { get; set; }
    public Point Location { get; set; }
}

Я столкнулся с этой проблемой, потому что у меня было if (!optionsBuilder.IsConfigured) вокруг всего в моем OnConfiguring. Мне пришлось удалить это, чтобы заставить add-migrations работать.

person Kyle    schedule 10.12.2018

Как указал Кайл, вам нужно вызвать UseNetTopologySuite(), но я бы назвал его во время ConfigureServices следующим образом:

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services
            .AddEntityFrameworkNpgsql()
            .AddDbContext<MyDBContext>(opt =>
                opt.UseNpgsql(Configuration.GetConnectionString("MyDBConnection"),
                                o=>o.UseNetTopologySuite()))
            .BuildServiceProvider();
        ...
    }
    ...
}
person igorushi    schedule 09.08.2019