Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用EF和Dot Net Core 1(PostgreSQL数据库)生成迁移时出错_C#_.net_Postgresql_Asp.net Core_Asp.net Core 1.0 - Fatal编程技术网

C# 使用EF和Dot Net Core 1(PostgreSQL数据库)生成迁移时出错

C# 使用EF和Dot Net Core 1(PostgreSQL数据库)生成迁移时出错,c#,.net,postgresql,asp.net-core,asp.net-core-1.0,C#,.net,Postgresql,Asp.net Core,Asp.net Core 1.0,我遵循了damienbod()的教程。我设法连接到我的PostgreSql数据库,它创建了EntityMigration历史表、DataEventRecord表和SourceInfo表。总共有三个项目(Postgre需要两个,第三个是我的实际项目):DataAccessPostgreSqlProvider、DomainModel和iConnect 我已经创建了一个模型,下面是代码,然后执行:添加迁移NestProtectDevices-Context NestProtectDevices 我必须

我遵循了damienbod()的教程。我设法连接到我的PostgreSql数据库,它创建了EntityMigration历史表、DataEventRecord表和SourceInfo表。总共有三个项目(Postgre需要两个,第三个是我的实际项目):DataAccessPostgreSqlProvider、DomainModel和iConnect

我已经创建了一个模型,下面是代码,然后执行:添加迁移NestProtectDevices-Context NestProtectDevices

我必须指定-Context,否则会出现错误,如果我指定DomainModelPostgreSqlContext的-Context,它只会生成一个空迁移文件(而不是从我的模型生成一个)。这就是我指定-Context作为模型名的原因。下面是模型的代码和我得到的错误。让我知道是否需要任何其他代码来帮助调试

using DataAccessPostgreSqlProvider;
using DomainModel;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using DomainModel.Model;

namespace iConnect.Models.Nest
{
    public class NestProtectDevices : DomainModelPostgreSqlContext
    {
        public NestProtectDevices(DbContextOptions<DomainModelPostgreSqlContext> options) : base(options)
        {
        }

        public long DeviceId { get; set; }
        public long UserId { get; set; }
        public int CompanyId { get; set; }
        public long StructureId { get; set; }
        public long WhereId { get; set; }
        public string Name { get; set; }
        public string NameLong { get; set; }
        public bool IsOnline { get; set; }
        public int BatteryHealth { get; set; }
        public int CoAlarmState { get; set; }
        public int SmokeAlarmState { get; set; }
        public string UiColorState { get; set; }
        public bool IsManualTestActive { get; set; }
        public DateTime LastManualTestTime { get; set; }
        public DateTime Timestamp { get; set;}
    }
}
使用DataAccessPostgreSqlProvider;
使用域模型;
使用制度;
使用System.Collections.Generic;
使用System.Linq;
使用System.Threading.Tasks;
使用Microsoft.EntityFrameworkCore;
使用DomainModel.Model;
命名空间iConnect.Models.Nest
{
公共类NestProtectDevices:DomainModelPostgreSqlContext
{
公共NestProtectDevices(DbContextOptions选项):基本(选项)
{
}
公共长设备ID{get;set;}
公共长用户标识{get;set;}
public int CompanyId{get;set;}
公共长结构ID{get;set;}
公共长位置ID{get;set;}
公共字符串名称{get;set;}
公共字符串NameLong{get;set;}
公共bool IsOnline{get;set;}
公共int电池健康{get;set;}
公共状态{get;set;}
公共报警状态{get;set;}
公共字符串UiColorState{get;set;}
公共布尔值是manualtestactive{get;set;}
公共日期时间LastManualTestTime{get;set;}
公共日期时间时间戳{get;set;}
}
}
有错误的命令:

PM> add-migration NestProtectDevices -Context NestProtectDevices
No parameterless constructor was found on 'NestProtectDevices'. Either add a parameterless constructor to 'NestProtectDevices' or add an implementation of 'IDbContextFactory<NestProtectDevices>' in the same assembly as 'NestProtectDevices'.
PM>添加迁移NestProtectDevices-上下文NestProtectDevices
在“NestProtectDevices”上未找到无参数构造函数。向“NestProtectDevices”添加无参数构造函数,或在与“NestProtectDevices”相同的程序集中添加“IDbContextFactory”的实现。
使用DataAccessPostgreSqlProvider;
使用域模型;
使用制度;
使用System.Collections.Generic;
使用System.Linq;
使用System.Threading.Tasks;
使用Microsoft.EntityFrameworkCore;
使用DomainModel.Model;
命名空间iConnect.Models.Nest
{
公共类NestProtectDevices:DomainModelPostgreSqlContext
{
公共NestProtectDevices(DbContextOptions选项):基本(选项)
{
}
公共数据库集设备{get;set;}
}
公共类设备
{
公共长设备ID{get;set;}
公共长用户标识{get;set;}
public int CompanyId{get;set;}
公共长结构ID{get;set;}
公共长位置ID{get;set;}
公共字符串名称{get;set;}
公共字符串NameLong{get;set;}
公共bool IsOnline{get;set;}
公共int电池健康{get;set;}
公共状态{get;set;}
公共报警状态{get;set;}
公共字符串UiColorState{get;set;}
公共布尔值是manualtestactive{get;set;}
公共日期时间LastManualTestTime{get;set;}
公共日期时间时间戳{get;set;}
}
}

除非这个DataAccessPostgreSqlProvider与常规Sql provider完全不同,否则我认为应该像这样设置它。顺便说一句,你文章中的链接不好。

你得到的错误似乎很有帮助。除了已有的构造函数之外,还要向类中添加一个无参数构造函数

public NestProtectDevices() 
{
}

这个错误没有确切地告诉您问题是什么吗?如果我将它设置为无参数构造函数,那么它会错误地指出它需要提供选项。我仍在寻找答案。为什么您的
NestProtectDevices
继承自
DomainModelPostgreSqlContext
?您的模型是sql上下文吗?那不行。您的上下文应该是自己的类,并且有一个属性
NestProtectDevices
DbSet
),它是一个表。或者,如果这是您的上下文,那么这些属性(UserId,…)用于什么?它们应该在自己的模型中,而不是在上下文中。。。你的代码很混乱,链接已经更新了。谢谢你的回复。我试试看它是否管用。我在Sqlite和MS SQL Server数据提供程序中也遇到了这个错误。添加无参数构造函数可以有效地帮助您。
public NestProtectDevices() 
{
}