Domanda

È possibile utilizzare classi parziali per creare le proprietà che punta a una proprietà un'associazione generata dal progettista L2S. Inoltre, sarò in grado di utilizzare la nuova proprietà nelle query?

Come posso raggiungere questo obiettivo?

È stato utile?

Soluzione

Sì, è possibile, ma si deve applicare gli stessi attributi come il linq2sql generato proprietà cioè.

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

TestDatas essendo il rapporto originale.

Aggiornamento: una query di esempio ho fatto funzionare:

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

Altri suggerimenti

Se si desidera solo per dare un nome diverso alla proprietà dell'associazione, basta usare la pagina di proprietà per l'associazione e rinominare il genitore e / o di proprietà figlio. Che cambierà il nome del EntityRef / EntitySet nella classe.

Modifica : Lo svantaggio di usare una proprietà separata in una classe parziale è che LINQ non sarà in grado di usarlo per la generazione di query - essenzialmente sarete costretti per ottenere sempre le entità prima di poter utilizzare le proprietà relative sull'oggetto. Rinominando si consente LINQ per utilizzare le proprietà relative alla costruzione di query che può risultare in una query più efficiente. Ad esempio, se si desidera ottenere soggetti, quando un ente collegato ha un valore particolare proprietà, utilizzando l'entità attributo decorato permetterà LINQ per generare il codice SQL per tirare solo quei valori corrispondenti dal database. Con l'implementazione di proprietà ingenua (che fa riferimento semplicemente la proprietà rapporto sottostante, in effetti rinominandolo), si sarà costretti a prima ottenere tutte le entità, quindi effettuare il filtraggio nella vostra applicazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top