C# 代码优先迁移添加带下划线的添加字段

C# 代码优先迁移添加带下划线的添加字段,c#,migration,code-first,entity-framework-6,C#,Migration,Code First,Entity Framework 6,我有一个数据库,有两个链接的表。当我运行初始迁移时,会添加一个额外的分析\u Id字段,即使该字段不在我的模型中 我的基本设置是,分析将有一个随时间(1到多)的签出历史记录。但是,在任何时候它都只有1(由分析表上的CheckedOutById表示) 以及分析表的脚本(注意rogue Checkout_Id字段) 实体框架只是执行您让它执行的操作。请注意,在分析和签出之间有两种关系 首先,您有一个一对一的关系,并且使用CheckedOutById和AnalysisId存储该关系 然后,由于分析实体

我有一个数据库,有两个链接的表。当我运行初始迁移时,会添加一个额外的
分析\u Id
字段,即使该字段不在我的模型中

我的基本设置是,分析将有一个随时间(1到多)的签出历史记录。但是,在任何时候它都只有1(由分析表上的CheckedOutById表示)

以及分析表的脚本(注意rogue Checkout_Id字段)


实体框架只是执行您让它执行的操作。请注意,在
分析
签出
之间有两种关系

首先,您有一个一对一的关系,并且使用
CheckedOutById
AnalysisId
存储该关系

然后,由于
分析
实体中的导航属性
签出
,您也有一对多关系,但是
签出
实体没有外键来存储此关系,实体框架正在为您生成一个

我还发现了其他问题,也许你想看看:

  • 属性
    [ForeignKey(“ByUser”)]
    放错了位置
  • 如果使用命名约定,则不需要使用
    ForeignKey
    属性
  • 在构造函数中初始化导航属性将禁用更改跟踪代理(我相信会引发异常),因为您将覆盖EF为您创建的集合
编辑: 您可以使用此代码使用fluent api设置关系。我对你的代码做了一些假设,但它应该是可行的。在
DbContext
类中使用此选项

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<CheckOut>().HasRequired(c => c.Analysis).WithOptional(a => a.CheckedOutBy);
    modelBuilder.Entity<Analysis>().HasMany(a => a.CheckOuts).WithRequired(c => c.AnalysisMany);
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity().HasRequired(c=>c.Analysis)。with可选(a=>a.CheckedOutBy);
modelBuilder.Entity().HasMany(a=>a.checkout).WithRequired(c=>c.AnalysisMany);
}

实体框架只是执行您告诉它的操作。请注意,在
分析
签出
之间有两种关系

首先,您有一个一对一的关系,并且使用
CheckedOutById
AnalysisId
存储该关系

然后,由于
分析
实体中的导航属性
签出
,您也有一对多关系,但是
签出
实体没有外键来存储此关系,实体框架正在为您生成一个

我还发现了其他问题,也许你想看看:

  • 属性
    [ForeignKey(“ByUser”)]
    放错了位置
  • 如果使用命名约定,则不需要使用
    ForeignKey
    属性
  • 在构造函数中初始化导航属性将禁用更改跟踪代理(我相信会引发异常),因为您将覆盖EF为您创建的集合
编辑: 您可以使用此代码使用fluent api设置关系。我对你的代码做了一些假设,但它应该是可行的。在
DbContext
类中使用此选项

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<CheckOut>().HasRequired(c => c.Analysis).WithOptional(a => a.CheckedOutBy);
    modelBuilder.Entity<Analysis>().HasMany(a => a.CheckOuts).WithRequired(c => c.AnalysisMany);
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity().HasRequired(c=>c.Analysis)。with可选(a=>a.CheckedOutBy);
modelBuilder.Entity().HasMany(a=>a.checkout).WithRequired(c=>c.AnalysisMany);
}

实体框架只是执行您告诉它的操作。请注意,在
分析
签出
之间有两种关系

首先,您有一个一对一的关系,并且使用
CheckedOutById
AnalysisId
存储该关系

然后,由于
分析
实体中的导航属性
签出
,您也有一对多关系,但是
签出
实体没有外键来存储此关系,实体框架正在为您生成一个

我还发现了其他问题,也许你想看看:

  • 属性
    [ForeignKey(“ByUser”)]
    放错了位置
  • 如果使用命名约定,则不需要使用
    ForeignKey
    属性
  • 在构造函数中初始化导航属性将禁用更改跟踪代理(我相信会引发异常),因为您将覆盖EF为您创建的集合
编辑: 您可以使用此代码使用fluent api设置关系。我对你的代码做了一些假设,但它应该是可行的。在
DbContext
类中使用此选项

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<CheckOut>().HasRequired(c => c.Analysis).WithOptional(a => a.CheckedOutBy);
    modelBuilder.Entity<Analysis>().HasMany(a => a.CheckOuts).WithRequired(c => c.AnalysisMany);
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity().HasRequired(c=>c.Analysis)。with可选(a=>a.CheckedOutBy);
modelBuilder.Entity().HasMany(a=>a.checkout).WithRequired(c=>c.AnalysisMany);
}

实体框架只是执行您告诉它的操作。请注意,在
分析
签出
之间有两种关系

首先,您有一个一对一的关系,并且使用
CheckedOutById
AnalysisId
存储该关系

然后,由于
分析
实体中的导航属性
签出
,您也有一对多关系,但是
签出
实体没有外键来存储此关系,实体框架正在为您生成一个

我还发现了其他问题,也许你想看看:

  • 属性
    [ForeignKey(“ByUser”)]
    放错了位置
  • 如果使用命名约定,则不需要使用
    ForeignKey
    属性
  • 初始化导航正确
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<CheckOut>().HasRequired(c => c.Analysis).WithOptional(a => a.CheckedOutBy);
        modelBuilder.Entity<Analysis>().HasMany(a => a.CheckOuts).WithRequired(c => c.AnalysisMany);
    }