在已删除的列上找不到流畅的 nhibernate 列

fluent nhibernate column not found on a deleted column

我们删除了一个主键并将其转换为组合键。 属性 已从模型和 Fluent 映射中删除。该字段已从数据库中删除。现在,当我们在提交时触发 QueryOver,它会触发更新并且更新会抛出 SQL Error: Invalid Column Name: 'SubmissionID'

上一个

public class Submission{
  public virtual int SubmissionID{get;set;}
  public virtual int CandidateID{get;set;}
  public virtual int JobID{get;set;}
}
public class SubmissionMap:...{
  public SubmissionMap(){
    Id(x=>x.SubmissionID
  }
}

改为

public class Submission{
  public virtual Candidate Candidate{get;set;}
  public virtual Job Job{get;set;}
}
public class SubmissionMap:...{
  public SubmissionMap(){
    CompositeId()
     .KeyReference(x=>x.Job)
     .KeyReference(x=>.Candidate);

  }
}

此更改后,提交的任何 update/insert 都会触发 SQL Error: Invalid SubmissionID column。我们记录了所有 NHibernate SQL 查询,其中 none 似乎有 SubmissionID 列。

作为临时修复,我们重新创建了 SubmissionID 列,错误消失了。我们确实有 Redis 二级缓存。

那么,您还需要 Submission 实体吗?它现在看起来是 Candidate 和 Job 之间的纯 many-to-many 关系。

然后可以在没有中间实体的情况下对其进行映射。 (也请参阅 this page 上的最后一个示例。)

如果你在 Submission 上有额外的属性,放弃它的代理键来换取一个组合键是很奇怪的。这通常会使使用 ORM 变得更加困难。例如,您现在应该实施 Submissionid as a component. (See this blog for more explanation on why this, or read the whole composite-id reference。)

现在谈谈您的实际问题和麻烦:抱歉,根据您问题中提供的事实,我不知道这怎么可能。你在数据库中有一些旧的触发器在乱搞吗?