Pergunta

Neste cenário, tenho um banco de dados existente com três modelos:

Address, que tem um 'AddressId', 'ParentId', 'City', 'State', etc.

Person, que possui um 'PersonId', 'Name', etc.

Company, que tem um 'CompanyId', 'Name', etc.

Porque Address pode conter linhas para mais modelos do que apenas uma tabela, não há chave estrangeira;o Address a coluna 'ParentId' conteria um 'PersonId' ou 'CompanyId'.

Para gerar meu DbContext, usei o Entity Framework Power Tools Beta 2.Devido à falta de integridade referencial, as classes geradas para Person e Company não contêm uma coleção de endereços como deveriam.

Como eu alteraria essas classes para adicionar esta propriedade "Endereços" e garantiria que ela fosse mapeada corretamente para a tabela de endereços?

No momento estou fazendo algo assim;Prefiro que o contexto mapeie, se possível:

public IEnumerable<Address> Addresses
{
   get 
   {
       IEnumerable<Address> addresses = null;
       using(MyDb db = new MyDb())
       {
            addresses = db.Addresses.Where(a => a.ParentId == this.PersonId)
       }

       return addresses;
   }
}

Obrigado!

Foi útil?

Solução

Se possível, você deve adicionar um ID exclusivo à tabela de endereços e, em seguida, armazenar esse ID com a entidade à qual pertence, seja uma pessoa, empresa, fornecedor, etc.

Se não for possível devido ao cenário de vários endereços, você poderá criar uma nova tabela AddressXRef que armazene os GUIDs das entidades (fornecedor, pessoa, empresa, etc.) e o GUID do endereço;portanto, cada entidade poderá ter vários endereços e a EF ficará muito feliz com esta configuração, pois haverá chaves por toda parte.

(Eu também gostaria de algum tipo de indicador de tipo de endereço na tabela Xref para saber que tipo de endereço era, correspondência, remessa, etc.)

Outras dicas

Crie classes parciais para ambos Company e Person que possuem aquela propriedade que você criou nele.

public partial class Company
{
   public IEnumerable<Address> Addresses { ... }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top