Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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模型生成问题_C#_Entity Framework - Fatal编程技术网

C# EF模型生成问题

C# EF模型生成问题,c#,entity-framework,C#,Entity Framework,我添加了一个类并创建了一个迁移,但是当我更新数据库时,我得到了一个错误。这让我很困惑,因为我确实有钥匙!有什么想法吗 在模型生成过程中检测到一个或多个验证错误: ModuleStatus::EntityType“ModuleStatus”没有 键已定义。定义此EntityType的键。模块状态: EntityType:EntitySet“ModuleStatus”基于类型“ModuleStatus” 没有定义键的 班级 public class ModuleStatus { [Key]

我添加了一个类并创建了一个迁移,但是当我更新数据库时,我得到了一个错误。这让我很困惑,因为我确实有钥匙!有什么想法吗

在模型生成过程中检测到一个或多个验证错误:

ModuleStatus::EntityType“ModuleStatus”没有 键已定义。定义此EntityType的键。模块状态: EntityType:EntitySet“ModuleStatus”基于类型“ModuleStatus” 没有定义键的

班级

public class ModuleStatus
{
    [Key]
    public int ModuleStatusId { get; set; }

    public Guid ModuleId { get; set; }

    [StringLength(100)]
    public string NetworkAddress { get; set; }

    [StringLength(100)]
    public string ModuleName { get; set; }

    [StringLength(100)]
    public string ModuleDescription { get; set; }

    [StringLength(50)]
    public string ModuleVersion { get; set; }

    public TimeSpan UpTime { get; set; }

    public DateTime LastUpdated { get; set; }
}
迁移过程如下所示

    public override void Up()
    {
        CreateTable(
            "dbo.ModuleStatus",
            c => new
                {
                    ModuleStatusId = c.Int(nullable: false, identity: true),
                    ModuleId = c.Guid(nullable: false),
                    NetworkAddress = c.String(maxLength: 100),
                    ModuleName = c.String(maxLength: 100),
                    ModuleDescription = c.String(maxLength: 100),
                    ModuleVersion = c.String(maxLength: 50),
                    UpTime = c.Time(nullable: false, precision: 7),
                    LastUpdated = c.DateTime(nullable: false),
                })
            .PrimaryKey(t => t.ModuleStatusId);

    }
堆栈跟踪:

ModuleStatus::EntityType“ModuleStatus”未定义键。定义 此EntityType的键。ModuleStatus:EntityType:EntitySet “ModuleStatus”基于没有键的类型“ModuleStatus” 定义

位于System.Data.Entity.Core.Metadata.Edm.EdmModel.Validate()处 System.Data.Entity.DbModelBuilder.Build(DbProviderManifest providerManifest,数据库providerInfo providerInfo)位于 System.Data.Entity.DbModelBuilder.Build(DbConnection 提供程序连接)位于 System.Data.Entity.Internal.LazyInternalContext.CreateModel(LazyInternalContext (上下文)在 System.Data.Entity.Internal.RetryLazy
2.GetValue(TInput输入)位于
System.Data.Entity.Internal.LazyInternalContext.InitializeContext()
在 System.Data.Entity.Internal.InternalContext.ForceSpaceLoadingForknownEntityTypes() 在 System.Data.Entity.DbContext.System.Data.Entity.Infrastructure.IOObjectContextAdapter.get_ObjectContext() 位于e:\App中的---.----DataContext..ctor() 开发\瞪羚- EstateManager\CI-MAIN\------Context.cs:line 28 ---来自引发异常的上一个位置的堆栈结束跟踪---在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()位于 System.Data.Entity.Infrastructure.DbContextInfo.CreateInstance()位于 System.Data.Entity.Infrastructure.DbContextInfo..ctor(类型 contextType、DbProviderInfo模型ProviderInfo、AppConfig配置、, DbConnectionInfo connectionInfo,Func
1解析器)位于 System.Data.Entity.Migrations.Dbmigator..ctor(Dbmigrations配置 配置,DbContext usersContext,DatabaseExistenceEstate ExistenceEstate,布尔值,在 System.Data.Entity.Migrations.Dbmigator..ctor(Dbmigrations配置 配置)在 System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.GetMigrator() 在 System.Data.Entity.Migrations.Design.ToolingFacade.UpdateRunner.Run() 在System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)在 System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)
位于System.Data.Entity.Migrations.Design.ToolingFacade.Run(BaseRunner 跑步者)在 System.Data.Entity.Migrations.Design.ToolingFacade.Update(字符串 targetMigration,布尔力)在 System.Data.Entity.Migrations.UpdateDatabaseCommand.c_uuDisplayClass2.b_uuu0() 在 System.Data.Entity.Migrations.MigrationsDomainCommand.Execute(操作 指挥部)

更新2 结果表明,只有当我的
DataContext中有这一行时,它才会失败

    public IDbSet<Site> Sites { get; set; } // works fine with this in
    //public IDbSet<ModuleStatus> ModuleStatuses { get; set; } // fails if this is commented in
公共IDbSet站点{get;set;}//在 //公共IDbSet ModuleStatuses{get;set;}//如果在中对此进行了注释,则会失败
将其放入DbContext类可能值得一试:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<ModuleStatus>().HasKey(x = x.ModuleStatusId);

    base.OnModelCreating(modelBuilder);
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity().HasKey(x=x.ModuleStatusId);
基于模型创建(modelBuilder);
}

不确定这是否有用,但值得一试。

克里斯,请参考以下链接:


可能会发生冲突或歧义。[Key]注释有些冗余,因为重写的Up()方法已经定义了主键。尝试删除[Key]注释,并告知我们这是否解决了问题。

您是否使用
System.Data.Entity.dll
而不是
EntityFramework.dll
?据我所知,使用
EntityFramework.dll
)您实际上不需要添加
[Key]
属性,如果属性名是
Id
[ClassName]Id
,尽管如果“额外”属性是原因,我会非常惊讶。。。你的迁移看起来像什么?用我的迁移更新了这个问题。。。我们的数据库中有许多实体,我以前从未见过这个问题。你是对的,虽然它看起来是正确的,但我不认为是什么导致了这个,也许是一个非典型字段导致了这个。如果删除GUID和Timespan字段,迁移是否有效?