Pergunta

Para a parte do projeto que estou trabalhando atualmente, eu tenho um conjunto de quatro mesas para ações Distribuível. Uma tabela é a base abstrata para os outros três, e cada tabela é representada no meu modelo EF assim:

EF Model - Ações http: // chris. charabaruk.com/system/files/images/EF+Model+Actions.png

Há dois problemas que estou enfrentando atualmente com isso, no entanto. O primeiro problema é que Actor (uma referência a uma User) e Subject (uma referência a uma entidade da classe associada a cada tipo de ação) são null em minhas subclasses, apesar das colunas de banco de dados associados a realização de chaves válidas para linhas em seu associado mesas. Embora eu possa pegar as chaves via ActorReference e SubjectReference isso, claro, exige a criação de um novo contexto EF e consulta-lo para os objetos referenciados (como Foo Reference.Value também é null).

O segundo problema é que o fim recíproca da relação entre as classes de ação concretos e suas classes de entidade relacionados sempre transformar-se nada. Por exemplo, Task.RelatedActions, que deveria me dar todos os objetos TaskAction onde Subject se refere ao objeto determinada tarefa em que RelatedActions é chamado, é totalmente desprovido de objetos. Novamente, existem linhas válidas no banco de dados, Entity Framework não é apenas colocá-los em objetos e entregando-os para mim.

Qualquer um sabe o que é que estou fazendo errado, e o que devo fazer para que ele funcione?

Update: Parece que nenhuma das propriedades de relacionamento estão trabalhando no meu modelo de entidade mais, em tudo. WTF ...

Foi útil?

Solução

Eu acho que o problema que está ocorrendo aqui é que, por padrão o EF não carregar automaticamente entidades relacionadas. Se você carregar uma entidade, a coleção ou referência às entidades relacionadas estará vazia a menos que você faça uma das seguintes coisas:

1) Use o carregamento ansioso para recuperar sua entidade principal e sua entidade relacionada em uma única consulta. Para fazer isso, modificar sua consulta, adicionando uma chamada para o método Incluir. Em seu exemplo acima, você pode usar a seguinte consulta:

from a in context.Actions.Include("Actor") select a

Isto recuperar cada uma das acções com o método Ator relacionado.

2) Use o carregamento lento explícita para recuperar a entidade relacionada quando você precisar dele:

action1.ActorReference.Load()

Na versão do EF que será lançado com o .Net 4.0, você também terá a seguinte opção adicional:

3) Ligue o carregamento lento implícita para que as entidades relacionadas serão automaticamente recuperados quando você faz referência a propriedade de navegação.

  • Danny
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top