Pergunta

Eu criei duas entidades com um simples relacionamento 1 para muitos.

public class TestEntity
{
    public int Id { get; set; }
    public string Message { get; set; }

    public virtual ICollection<RelatedTest> RelatedTests { get; set; }
}

public class RelatedTest
{
    public int Id { get; set; }
    public bool Something { get; set; }

    public virtual TestEntity TestEntity { get; set; }
}

Quando eu vou testar este o ICollection propriedade de navegação não é instanciado.Eu não posso adicionar uma entidade relacionada.

var dataContext = new DataContext();
var testEntity = new TestEntity { Message = "Test message" };
var related = new RelatedTest { Something = true };
testEntity.RelatedTests.Add(related); //fails on this line because RelatedTests is null.
dataContext.TestEntities.Add(testEntity);
dataContext.SaveChanges();

É que a funcionalidade esperada?Tenho para instanciar a propriedade de navegação?Eu esperava que o Entity Framework para criar a coleção para mim.

Foi útil?

Solução

No exemplo acima, você provavelmente vai querer algo mais parecido com o

var dataContext = new DataContext();
var testEntity = new TestEntity { Message = "Test message" };
var related = new RelatedTest { Something = true };
testEntity.RelatedTests = new List<RelatedTest>{related};
dataContext.TestEntities.Add(testEntity);
dataContext.SaveChanges();

como você está criando a entidade base, de modo que a EF não tenha chegado as suas mãos sobre a entidade para fazer quaisquer ajustes.

Quando você recarregar esta entidade do banco de dados a coleta não deve ser nulo no exemplo acima, como você parece estar usando lazy loading.

Outras dicas

Bem, entity framework não 'inicializar' qualquer um dos seus objetos (exceto com dados JÁ existentes NA base de DADOS).Você tem que fazê-lo sozinho.EF apenas "mapas para o banco de dados'.

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