Pergunta

Eu estou tentando implementar classe hieararchy herança com servidor NHibernate e SQL. Eu fiz isso funcionar bem com a estratégia tabela por hierarquia (uma mesa e vários elementos da subclasse no arquivo de mapeamento).

No entanto, a estratégia tabela por subclasse (n + 1 tabelas e N elementos juntaram-subclasse em um arquivo de mapeamento) faz mais sentido no meu caso porque eu quero colocar algumas restrições nas tabelas subclasses. Eu estou lutando com o que tipo de associação PK / FK devo colocar na mesa de masterclass (Pessoas) e tabela de subclasse (ContactPersons). De acordo com a documentação do NHibernate, deve haver uma associação de chave primária entre as mesas. Eu tentei colocar a restrição FK do PK subclasse ao PK master class mas ainda não funciona. Eu recebo a seguinte exceção:

NHibernate.Exceptions.GenericADOException: não foi possível inserir: [Jobflow.Models.Entities.ContactPerson] [SQL: INSERT INTO ContactPersons (e-mail, empresa, PersonID) VALUES (?,?,?)] ---> Sistema. Data.SqlClient.SqlException:. não é possível inserir valor explícito para coluna de identidade na tabela 'ContactPersons' quando IDENTITY_INSERT está definido como OFF

Eu fiz tentar definir a IDENTITY_INSERT a ON mas isso não parece ajudar ...

Foi útil?

Solução

Você precisa declarar a coluna de Pessoas como identidade int, mas em ContactPersons como apenas int - apenas um necessidades tabela para acompanhar o valor de identidade. Suas chaves estrangeiras / chaves primárias estão bem, este é o único problema que você precisa resolver.

NHibernate irá inserir Pessoas, obter o novo valor de identidade usando SCOPE_IDENTITY () e, em seguida, usar esse valor explicitamente para a inserção em ContactPersons.

Outras dicas

Estou criando o esquema com NH SchemaExport. Ele cria uma chave estrangeira na chave primária subclasses:

alter table ContactPersons 
add constraint FK81E543E94B3FF9C3 
foreign key (Persons_FK) 
references Persons

Persons_FK é declarado no arquivo de mapeamento

<joined-subclass name="ContactPersons">
  <key column="Persons_FK"/>
  ...
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top