Pergunta

Posso usar classes parciais para criar propriedades que aponta para uma propriedade de associação gerados pelo designer L2S. Além disso, vou ser capaz de usar a nova propriedade em consultas?

Como posso conseguir isso?

Foi útil?

Solução

Sim, pode, mas você tem que aplicar os mesmos atributos como o linq2sql gerado ou seja propriedade.

    [Association(Name="Test_TestData", Storage="_TestDatas", ThisKey="SomeId", OtherKey="OtherId")]
    public System.Data.Linq.EntitySet<TestData> MyTestDatas
    {
        get
        {
            return this.TestDatas;
        }
    }

TestDatas sendo a relação originais.

Update: A consulta de exemplo Corri:

        var context = new DataClasses1DataContext();
        var tests =
            from d in context.Tests
            where d.MyTestDatas.Any(md=>md.MyId == 2)
            select new
            {
                SomeId = d.SomeId,
                SomeData = d.SomeData,
                Tests = d.MyTestDatas
            };
        foreach (var test in tests)
        {
            var data = test.Tests.ToList();
        }

Outras dicas

Se você quer apenas dar um nome diferente para a propriedade de associação, basta usar a página de propriedades para a associação e mudar o nome do pai e / ou a propriedade filho. Isso vai mudar o nome do EntityRef / EntitySet na classe.

Editar : A desvantagem de usar uma propriedade separada em uma classe parcial é que LINQ não será capaz de usá-lo ao gerar consultas - essencialmente você será forçado para obter sempre as entidades antes que você pode usar as propriedades relacionadas no objeto. Renomeando você permitir LINQ para usar as propriedades relacionadas na construção da consulta que pode resultar em uma consulta mais eficiente. Por exemplo, se você deseja obter entidades em que uma entidade relacionada tem um valor de propriedade particular, usando a entidade atributo decorado permitirá LINQ para gerar o SQL para puxar apenas os valores correspondentes do banco de dados. Com a implementação propriedade ingênuo (que simplesmente faz referência a propriedade relação subjacente, com efeito renomeá-lo), você vai ser obrigado a primeiro obter todas as entidades, em seguida, fazer a filtragem na sua aplicação.

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