Question

Puis-je utiliser des classes partielles pour créer des propriétés qui pointe à une propriété d'association générée par le concepteur L2S. En outre, je vais pouvoir utiliser la nouvelle propriété dans les requêtes?

Comment puis-je y parvenir?

Était-ce utile?

La solution

Oui, vous pouvez, mais vous devez appliquer les mêmes attributs que la propriété i.e. généré linq2sql.

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

TestDatas étant la relation originale.

Mise à jour: Une requête d'exemple que je courais:

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

Autres conseils

Si vous voulez juste donner un nom différent à la propriété de l'association, il suffit d'utiliser la page de propriétés de l'association et renommer le parent et / ou des biens de l'enfant. Cela va changer le nom du EntityRef / EntitySet dans la classe.

EDIT : L'inconvénient d'utiliser une propriété séparée dans une classe partielle est que LINQ ne sera pas en mesure de l'utiliser lors de la génération des requêtes - essentiellement, vous serez forcé d'avoir toujours les entités avant de pouvoir utiliser les propriétés liées à l'objet. En renommant vous permettent LINQ d'utiliser les propriétés liées à la construction de la requête qui peut entraîner une requête plus efficace. Par exemple, si vous voulez obtenir des entités où une entité a une valeur de propriété particulière, en utilisant l'entité décorée d'attribut permettra LINQ pour générer le SQL pour tirer seulement les valeurs correspondant à la base de données. Avec la mise en œuvre de la propriété naïve (qui référence simplement la propriété sous-jacente par rapport, en effet renommant), vous serez obligé d'abord obtenir toutes les entités, puis faire le filtrage dans votre application.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top