Pregunta

¿Puedo usar las clases parciales para crear propiedades que apunta a una propiedad de la asociación generada por el diseñador L2S. Además, voy a ser capaz de utilizar la nueva propiedad en las consultas?

¿Cómo puedo lograr esto?

¿Fue útil?

Solución

Sí se puede, pero hay que aplicar los mismos atributos que el linq2sql generada es decir propiedad.

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

TestDatas siendo la relación original.

Actualización: Una consulta de ejemplo me encontré:

        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();
        }

Otros consejos

Si lo que desea es dar un nombre diferente a la propiedad de la asociación, sólo tiene que utilizar la página de propiedades de la asociación y cambiar el nombre del padre y / o la propiedad del niño. Eso va a cambiar el nombre de la EntityRef / EntitySet en la clase.

Editar : La desventaja de usar una propiedad separada en una clase parcial es que LINQ no será capaz de utilizarlo en la generación de consultas - en esencia lo que va a ser obligado a obtener siempre las entidades antes de poder utilizar las propiedades relacionadas en el objeto. Cambiando el nombre de usted permite que LINQ para utilizar las propiedades relacionadas en la construcción de la consulta que puede resultar en una consulta más eficiente. Por ejemplo, si desea obtener entidades en las que una entidad relacionada tiene un valor de propiedad particular, utilizando la entidad atributo decorada permitirá LINQ para generar el código SQL para extraer sólo los valores correspondientes de la base de datos. Con la implementación de propiedad ingenua (que simplemente se hace referencia a la propiedad relación subyacente, en efecto, el cambio de nombre), que se verán obligados a obtener primero todas las entidades, a continuación, realice el filtrado en su aplicación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top