Fluente NHibernate Automap Cadastrado Sub-Class definindo a chave
-
06-09-2019 - |
Pergunta
Quando Automapping uma subclasse juntou-se nhibernate fluente, eu não posso descobrir como dar a subclasse juntou-se uma chave primária.
public class Address:Entity {
public virtual string Address1 { get; set; }
public virtual string Address2 { get; set; }
public virtual string City { get; set; }
public virtual string State { get; set; }
public virtual string Zip { get; set; }
public virtual string Phone { get; set; }
public virtual string Fax { get; set; }
public virtual IList<Location> Locations { get; set; }
}
public class Location:Address {
public virtual Address BillingAddress { get; set; }
public virtual string OfficeHours { get; set; }
public virtual string PatientAgeRestrictions { get; set; }
public virtual bool WheelchairAccess { get; set; }
public virtual string ContactPerson { get; set; }
public virtual string ContactEmail { get; set; }
public virtual string ContactPhone { get; set; }
public virtual string ContactFax { get; set; }
public virtual string TaxId { get; set; }
}
Eu quero Localização de ter o seu próprio id "id location_" com a sua própria sequência. Então eu quero que mapeado para o endereço através de uma coluna address_id.
Agora é gerar o local com "AddressID" como a chave primária, que não é o que eu quero. Como posso mudar isso com o mapeamento automático?
Solução
Eu não tenho certeza que você tem um relacionamento de subclasse juntou. Isto é, por definição, uma subclasse juntou tem o mesmo ID como sua classe pai. Por exemplo, você pode ter uma entidade Person
armazenados em seu banco de dados para o "povo" genéricos informações como nome / idade / etc e, em seguida, entidade uma Employee
subclasse que é armazenado em uma tabela diferente e contém dados como cargo, salário e datas de emprego . Assim, um Employee
é um subtipo de Person
e para obter o objeto total "Employee-Pessoa", você deve unir as duas tabelas em suas chaves primárias (por exemplo SELECT * FROM Employee INNER JOIN Person ON Employee.Employee_id = Person.Person_id
).
Você certeza sobre o seu modelo relacional aqui? É Location
realmente um subtipo de Address
? Inferindo um pouco de seus nomes de propriedade, parece-me que isso não é o que você pretende. Parece que você provavelmente tem uma relação muitos-para-muitos entre um Address
e um Organization
(isto é, pode haver muitas "organizações" no mesmo endereço e uma "organização" pode ter vários endereços), com uma "pessoa de contato" para a organização em um endereço específico. Caso em que você deve mapear "organização", "contato", e outra entidade que define a relação entre Address
e "organização".