我正在尝试EF Core 2.2的新功能。它基于以下文章。 “宣布实体框架核心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”)。如果它是导航属性,则通过将其强制转换为映射的实体类型来手动配置此属性的关系,否则使用“ OnModelCreating”中的NotMappedAttribute或“ EntityTypeBuilder.Ignore”忽略该属性。 Source = Microsoft.EntityFrameworkCore
答案 0 :(得分:8)
您需要致电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
能够正常工作,我不得不将其删除。
答案 1 :(得分:1)
正如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();
...
}
...
}