2 Propriétés LINQ Changement de nom SQL entité à travers des classes partielles
-
09-09-2019 - |
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?
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.