• 30.03.2017
  • 5 minute de citit

In acest articol

Acest subiect descrie capacitatile de serializare LINQ to SQL. Paragrafele care urmeaza ofera informatii despre cum sa adaugati serializarea in timpul generarii codului la momentul proiectarii si comportamentul de serializare in timp de rulare al LINQ la clasele SQL.

Puteti adauga cod de serializare la momentul proiectarii prin oricare dintre urmatoarele metode:

  • In Designerul relational de obiecte, schimbati proprietatea Mod de serializare la Unidirectional .

  • Pe linia de comanda SQLMetal, adaugati optiunea / serializare . Pentru mai multe informatii, consultati SqlMetal.exe (Instrument de generare a codului).

Prezentare generala

Codul generat de LINQ catre SQL ofera in mod implicit capacitati de incarcare amanata. Incarcarea amanata este foarte convenabila la nivel mediu pentru o incarcare transparenta a datelor la cerere. Cu toate acestea, este problematic pentru serializare, deoarece serializatorul declanseaza incarcarea amanata indiferent daca este intentionata sau nu incarcarea amanata. De fapt, atunci cand un obiect este serializat, inchiderea sa tranzitiva sub toate referintele de iesire incarcate cu amanare este serializata.

Functia de serializare LINQ catre SQL abordeaza aceasta problema, in principal prin doua mecanisme:

  • Un mod DataContext pentru dezactivarea incarcarii amanate (ObjectTrackingEnabled). Pentru mai multe informatii, consultati DataContext.

  • Un comutator de generare de cod pentru a genera atribute System.Runtime.Serialization.DataContractAttribute si System.Runtime.Serialization.DataMemberAttribute pe entitatile generate. Acest aspect, inclusiv comportamentul claselor de incarcare diferita in timpul serializarii, este subiectul principal al acestui subiect.

Definitii

  • Serializator DataContract : serializator implicit utilizat de componenta Windows Communication Framework (WCF) a .NET Framework 3.0 sau versiunile ulterioare.

  • Serializare unidirectionala : versiunea serializata a unei clase care contine doar o proprietate de asociere unidirectionala (pentru a evita un ciclu). Prin conventie, proprietatea din partea parinte a unei relatii cheie primara-straina este marcata pentru serializare. Cealalta parte a unei asociatii bidirectionale nu este serializata.

    Serializarea unidirectionala este singurul tip de serializare acceptat de LINQ catre SQL.

Exemplu de cod

Urmatorul cod foloseste clasele traditionale Clienti si Comenzi din baza de date esantion Northwind si arata modul in care aceste clase sunt decorate cu atribute de serializare.

// Clasa este decorata cu atributul DataContract. [Tabel (Nume = “dbo.Customers”)] [DataContract ()] clasa publica partiala Client: INotifyPropertyChanging, INotifyPropertyChanged {‘Clasa este decorata cu atributul DataContract. <Tabel (Nume: = “dbo.Customers”), _ DataContract ()> _ Clasa publica partiala implementeaza clientul System.ComponentModel.INotifyPropertyChanging, System.ComponentModel.INotifyPropertyChanged // Campurile private nu sunt decorate cu niciun atribut si sunt // elid. sir privat _CustomerID; // Proprietatile publice sunt decorate cu atributul // DataMember // si proprietatea Comanda specificand // numarul de serie. Consultati clasa Comanda mai tarziu in acest subiect pentru // exceptii. Client public () {this.Initialize (); } [Coloana (Stocare = “_ ID client”, DbType = ” _ Proprietate publica CustomerID () Ca sir Get Return Me._CustomerID End Get Set If ((Me._CustomerID = value) _ = false) Atunci Me.OnCustomerIDChanging (value) Me.SendPropertyChanging Me._CustomerID = value Me.SendPropertyChanged (“CustomerID “) Me.OnCustomerIDChanged End If End Set End Property // Urmatoarea proprietate de asociere este decorata cu // DataMember deoarece este partea parinte a relatiei //. Proprietatea inversa din clasa Order // nu are un atribut DataMember. Acest factor // previne un „ciclu”. [Association (Name = “FK_Orders_Customers”, Storage = “_ Orders”, OtherKey = “CustomerID”, DeleteRule = “NO ACTION”)] [DataMember (Order = 13)] public EntitySet <Order> Orders {get {return this._Orders ; } set {this._Orders.Assign (valoare); }} ‘ Urmatoarea proprietate a Asociatiei este decorata cu „DataMember, deoarece este partea parinte a relatiei”. Proprietatea inversa din clasa Ordinului nu are un atribut DataMember. Acest „factor previne un„ ciclu ”. <Association (Name: = “FK_Orders_Customers”, Storage: = “_ Orders”, OtherKey: = “CustomerID”, DeleteRule: = “NO ACTION”), _ DataMember (Order: = 13)> _ Ordine de proprietate publica () Ca EntitySet (Of [Order]) Get Return Me._Orders End Get Set (ByVal value As EntitySet (Of [Order])) Me._Orders.Assign (Value) End Set End Property

Pentru clasa Comanda din exemplul urmator, doar proprietatea de asociere inversa corespunzatoare clasei Clienti este afisata pentru concizie. Nu are un atribut DataMemberAttribute pentru a evita un ciclu.

// Clasa pentru tabelul Comenzi este, de asemenea, decorata cu atributul // DataContract. [Tabel (Nume = “dbo.Orders”)] [DataContract ()] clasa publica partiala Order: INotifyPropertyChanging, INotifyPropertyChanged ‘Clasa pentru tabelul Orders este, de asemenea, decorata cu atributul’ DataContract. <Tabel (Nume: = “dbo.Orders”), _ DataContract ()> _ Clasa publica partiala [Comanda] Implementeaza System.ComponentModel.INotifyPropertyChanging, System.ComponentModel.INotifyPropertyChanged // Campurile private pentru tabelul Comenzi nu sunt decorate cu / orice atribute si sunt elidate. private int _OrderID; // Proprietatile publice sunt decorate cu atributul DataMember //. // Proprietatea de asociere inversa din partea // cheii straine nu are atributul DataMember. [Asociatie (Nume = “FK_Orders_Customers”, Storage = “_Customer”, ThisKey = “CustomerID”, IsForeignKey = true)] public Clientul Client ‘Campurile private pentru tabelul Comenzi nu sunt decorate cu’ niciun atribut si sunt elise. Private _CustomerID As String „Proprietatile publice sunt decorate cu atributul DataMember”. „Proprietatea de asociere inversa din partea„ cheii straine ”nu are atributul DataMember. <Asociere (Nume: = “FK_Orders_Customers”, Stocare: = “_ Client”, ThisKey: = “CustomerID”, IsForeignKey: = true)> _ Proprietate publica Client () Ca client Private _CustomerID As String „Proprietatile publice sunt decorate cu atributul DataMember”. „Proprietatea de asociere inversa din partea„ cheii straine ”nu are atributul DataMember. <Asociere (Nume: = “FK_Orders_Customers”, Stocare: = “_ Client”, ThisKey: = “CustomerID”, IsForeignKey: = true)> _ Client de proprietate publica () Ca client Private _CustomerID As String „Proprietatile publice sunt decorate cu atributul DataMember”. „Proprietatea de asociere inversa din partea„ cheii straine ”nu are atributul DataMember. <Asociere (Nume: = “FK_Orders_Customers”, Stocare: = “_ Client”, ThisKey: = “CustomerID”, IsForeignKey: = true)> _ Proprietate publica Client () Ca client

Cum sa serializati entitatile

Puteti serializa entitatile in codurile afisate in sectiunea anterioara, dupa cum urmeaza;

Northwnd db = new Northwnd (@ “c \ northwnd.mdf”); Client cust = db.Customers.Where (c => c.CustomerID == “ALFKI”). Single (); DataContractSerializer dcs = new DataContractSerializer (typeof (Client)); StringBuilder sb = new StringBuilder (); XmlWriter writer = XmlWriter.Create (sb); dcs.WriteObject (scriitor, cust); scriitor.Inchidere (); sir xml = sb.ToString (); Dim db As New Northwnd (“…”) Dim cust = (From c In db.Customers _ Where c.CustomerID = “ALFKI”). Single Dim dcs As New DataContractSerializer (GetType (Customer)) Dim sb As StringBuilder = New StringBuilder () Dim writer As XmlWriter = XmlWriter.Create (sb) dcs.WriteObject (writer, cust) writer.Close () Dim xml As String = sb.ToString ()

Relatii de auto-recursivitate

Relatiile de auto-recursivitate urmeaza acelasi model. Proprietatea de asociere corespunzatoare cheii straine nu are un atribut DataMemberAttribute, in timp ce proprietatea parinte are.

Luati in considerare urmatoarea clasa care are doua relatii auto-recursive: Employee.Manager / Reports si Employee.Mentor / Mentees.

// Fara atribut DataMember. Manager angajat public; [DataMember (Order = 3)] public EntitySet <Employee> Rapoarte; // Fara DataMember Mentor angajat public; [DataMember (Order = 5)] public EntitySet <Employee> Mentees; „Fara atribut DataMember Manager public ca angajat <DataMember (Order: = 3)> _ Public Reports as EntitySet (Of Employee)” Fara DataMember atribut Mentor public ca angajat <DataMember (Order: = 5)> _ Public Mentees As EntitySet (Of Angajat)

Vezi si

  • Informatii generale
  • SqlMetal.exe (instrument de generare a codului)
  • Cum sa: faceti entitatile serializabile

marco salieri porno malena la pugliese video hard
culi bollenti malena la pugliese video hot
valentina nappi spiaggia malena la pugliese video link
io sono valentina nappi streaming malena la pugliese video porno
il culo di malena malena la pugliese video streaming
italian pron malena la pugliese video xxx
porn accademy malena la pugliese videos
moglie amatoriale tube malena la pugliese x
pornostar bresciane malena la pugliese x video
martina smeraldi video porno malena la pugliese xnxx
cento x cento porn tube malena la pugliese xvideos
roberta gemma sex malena la pugliese xx
vuole essere inculata malena la pugliese xxx
martina smeraldi e malena malena la pugliese you porn
indya mirales malena la pugliesexxx
nuovi video porno malena malena la puglise
italian cento x cento malena la puhliese
italian xxx malena la troia
roberta gemma free malena la.pugliese porn
gemma xxx malena la.pugliese porno