Entity Framework Core - EF Core 2.2 - 'Point.Boundary' 是接口类型 ('IGeometry')
Entity Framework Core - EF Core 2.2 - 'Point.Boundary' is of an interface type ('IGeometry')
我正在尝试 EF Core 2.2 的新功能。它基于以下文章。 "Announcing 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' 忽略 属性 38=]。
来源=Microsoft.EntityFrameworkCore
您需要致电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
正常工作,我必须删除它。
正如 Kyle 指出的那样,您需要调用 UseNetTopologySuite()
,但我会在 ConfigureServices 期间这样调用它:
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services
.AddEntityFrameworkNpgsql()
.AddDbContext<MyDBContext>(opt =>
opt.UseNpgsql(Configuration.GetConnectionString("MyDBConnection"),
o=>o.UseNetTopologySuite()))
.BuildServiceProvider();
...
}
...
}
我正在尝试 EF Core 2.2 的新功能。它基于以下文章。 "Announcing 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' 忽略 属性 38=]。 来源=Microsoft.EntityFrameworkCore
您需要致电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
正常工作,我必须删除它。
正如 Kyle 指出的那样,您需要调用 UseNetTopologySuite()
,但我会在 ConfigureServices 期间这样调用它:
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services
.AddEntityFrameworkNpgsql()
.AddDbContext<MyDBContext>(opt =>
opt.UseNpgsql(Configuration.GetConnectionString("MyDBConnection"),
o=>o.UseNetTopologySuite()))
.BuildServiceProvider();
...
}
...
}