Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W linQ to SQL model obiektów wyrażony w języku programowania dewelopera jest mapowany na model danych relacyjnej bazy danych. Operacje na danych są następnie przeprowadzane zgodnie z modelem obiektów.
W tym scenariuszu nie wydajesz poleceń bazy danych (na przykład INSERT
) względem bazy danych. Zamiast tego zmieniasz wartości i wykonujesz metody w swoim modelu obiektów. Jeśli chcesz zapytać bazę danych lub przesłać do niej zmiany, LINQ to SQL tłumaczy twoje żądania na poprawne polecenia SQL i wysyła te polecenia do bazy danych.
Najbardziej podstawowe elementy w modelu obiektów LINQ to SQL i ich relacje z elementami w modelu danych relacyjnych zostały podsumowane w poniższej tabeli:
Model Obiektowy LINQ to SQL | Model danych relacyjnych |
---|---|
Klasa jednostki | Tabela |
Składowa klasy | Kolumna |
Stowarzyszenie | Relacja klucza obcego |
Metoda | Procedura przechowywana lub funkcja |
Uwaga / Notatka
W poniższych opisach założono, że masz podstawową wiedzę na temat modelu i reguł relacyjnych danych.
Klasy jednostek LINQ to SQL i tabele baz danych
W linQ to SQL tabela bazy danych jest reprezentowana przez klasę jednostek. Klasa obiektowa jest podobna do każdej innej klasy, którą można utworzyć, z tą różnicą, że adnotujesz klasę za pomocą specjalnych informacji, które kojarzą ją z tabelą bazy danych. Tę adnotację należy utworzyć, dodając atrybut niestandardowy (TableAttribute) do deklaracji klasy, jak w poniższym przykładzie:
Przykład
[Table(Name = "Customers")]
public class Customerzz
{
public string CustomerID;
// ...
public string City;
}
<Table(Name:="Customers")> _
Public Class Customer
Public CustomerID As String
' ...
Public City As String
End Class
W bazie danych można zapisywać tylko wystąpienia klas zadeklarowanych jako tabele (czyli klasy jednostek).
Aby uzyskać więcej informacji, zobacz sekcję Atrybut tabeli w Attribute-Based Mapowanie.
Członkowie klas LINQ to SQL oraz kolumny bazy danych
Oprócz kojarzenia klas z tabelami należy wyznaczyć pola lub właściwości reprezentujące kolumny bazy danych. W tym celu LINQ to SQL definiuje ColumnAttribute atrybut, jak w poniższym przykładzie:
Przykład
[Table(Name = "Customers")]
public class Customer
{
[Column(IsPrimaryKey = true)]
public string CustomerID;
[Column]
public string City;
}
<Table(Name:="Customers")> _
Public Class Customer
<Column(IsPrimaryKey:=True)> _
Public CustomerID As String
<Column()> _
Public City As String
End Class
Tylko pola i właściwości mapowane na kolumny są utrwalane lub pobierane z bazy danych. Te, które nie są deklarowane jako kolumny, są traktowane jako przejściowe części logiki aplikacji.
Atrybut ColumnAttribute ma różne właściwości, których można użyć do dostosowania tych elementów członkowskich reprezentujących kolumny (na przykład wyznaczenie elementu członkowskiego jako reprezentującego kolumnę klucza podstawowego). Aby uzyskać więcej informacji, zobacz sekcję "Atrybut kolumny" w Attribute-Based Mapowanie.
Skojarzenia LINQ to SQL i relacje klucza obcego z bazą danych
W linQ to SQL reprezentujesz skojarzenia bazy danych (takie jak relacje klucza obcego do klucza podstawowego AssociationAttribute ), stosując atrybut. W poniższym fragmencie kodu, klasa Order
zawiera właściwość Customer
z atrybutem AssociationAttribute. Ta właściwość i jej atrybut nawiązują relację między klasą Order
a klasą Customer
.
Poniższy przykład kodu pokazuje Customer
właściwość z Order
klasy.
Przykład
[Association(Name="FK_Orders_Customers", Storage="_Customer", ThisKey="CustomerID", IsForeignKey=true)]
public Customer Customer
{
get
{
return this._Customer.Entity;
}
set
{
Customer previousValue = this._Customer.Entity;
if (((previousValue != value)
|| (this._Customer.HasLoadedOrAssignedValue == false)))
{
this.SendPropertyChanging();
if ((previousValue != null))
{
this._Customer.Entity = null;
previousValue.Orders.Remove(this);
}
this._Customer.Entity = value;
if ((value != null))
{
value.Orders.Add(this);
this._CustomerID = value.CustomerID;
}
else
{
this._CustomerID = default(string);
}
this.SendPropertyChanged("Customer");
}
}
}
<Association(Name:="FK_Orders_Customers", Storage:="_Customer", ThisKey:="CustomerID", IsForeignKey:=true)> _
Public Property Customer() As Customer
Get
Return Me._Customer.Entity
End Get
Set
Dim previousValue As Customer = Me._Customer.Entity
If (((previousValue Is value) _
= false) _
OrElse (Me._Customer.HasLoadedOrAssignedValue = false)) Then
Me.SendPropertyChanging
If ((previousValue Is Nothing) _
= false) Then
Me._Customer.Entity = Nothing
previousValue.Orders.Remove(Me)
End If
Me._Customer.Entity = value
If ((value Is Nothing) _
= false) Then
value.Orders.Add(Me)
Me._CustomerID = value.CustomerID
Else
Me._CustomerID = CType(Nothing, String)
End If
Me.SendPropertyChanged("Customer")
End If
End Set
End Property
Aby uzyskać więcej informacji, zobacz sekcję Atrybutu skojarzenia w Attribute-Based Mapowanie.
Metody LINQ to SQL oraz procedury składowane w bazie danych
LINQ to SQL obsługuje procedury składowane i funkcje zdefiniowane przez użytkownika. W LINQ to SQL mapujesz te abstrakcje zdefiniowane przez bazę danych na obiekty klienckie, aby uzyskać do nich dostęp w silnie typowany sposób z poziomu kodu klienta. Podpisy metody przypominają jak najbliżej podpisy procedur i funkcji zdefiniowanych w bazie danych. Aby odnaleźć te metody, możesz użyć funkcji IntelliSense.
Zestaw wyników zwracany przez wywołanie procedury mapowanej jest silnie typizowaną kolekcją.
LINQ to SQL mapuje procedury składowane i funkcje na metody przy użyciu atrybutów FunctionAttribute oraz ParameterAttribute. Metody reprezentujące procedury składowane różnią się od metod reprezentujących funkcje zdefiniowane przez użytkownika przez IsComposable właściwość . Jeśli ta właściwość jest ustawiona na false
(wartość domyślna), metoda reprezentuje procedurę składowaną. Jeśli jest ustawiona na true
wartość , metoda reprezentuje funkcję bazy danych.
Uwaga / Notatka
Jeśli używasz programu Visual Studio, możesz użyć Projektanta relacyjnego obiektów, aby utworzyć metody mapowane na procedury składowane i funkcje zdefiniowane przez użytkownika.
Przykład
// This is an example of a stored procedure in the Northwind
// sample database. The IsComposable property defaults to false.
[Function(Name="dbo.CustOrderHist")]
public ISingleResult<CustOrderHistResult> CustOrderHist([Parameter(Name="CustomerID", DbType="NChar(5)")] string customerID)
{
IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), customerID);
return ((ISingleResult<CustOrderHistResult>)(result.ReturnValue));
}
' This is an example of a stored procedure in the Northwind
' sample database. The IsComposable property defaults to false.
<FunctionAttribute(Name:="dbo.CustOrderHist")> _
Public Function CustOrderHist(<Parameter(Name:="CustomerID", DbType:="NChar(5)")> ByVal customerID As String) As ISingleResult(Of CustOrderHistResult)
Dim result As IExecuteResult = Me.ExecuteMethodCall(Me, CType(MethodInfo.GetCurrentMethod, MethodInfo), customerID)
Return CType(result.ReturnValue, ISingleResult(Of CustOrderHistResult))
End Function
Aby uzyskać więcej informacji, zobacz sekcje Atrybut funkcji, Atrybut procedury składowanej i Atrybut parametru Attribute-Based Mapowanie i Procedury składowane.