Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In LINQ to SQL wird ein Objektmodell, das in der Programmiersprache des Entwicklers ausgedrückt wird, dem Datenmodell einer relationalen Datenbank zugeordnet. Vorgänge zu den Daten werden dann nach dem Objektmodell durchgeführt.
In diesem Szenario geben Sie keine Datenbankbefehle (z. B INSERT
. ) an die Datenbank aus. Stattdessen ändern Sie Werte und führen Methoden innerhalb des Objektmodells aus. Wenn Sie die Datenbank abfragen oder änderungen senden möchten, übersetzt LINQ to SQL Ihre Anforderungen in die richtigen SQL-Befehle und sendet diese Befehle an die Datenbank.
Die grundlegendsten Elemente im LINQ to SQL-Objektmodell und ihre Beziehung zu Elementen im relationalen Datenmodell werden in der folgenden Tabelle zusammengefasst:
LINQ to SQL-Objektmodell | Relationales Datenmodell |
---|---|
Entitätsklasse | Tabelle |
Klassenmitglied | Kolumne |
Verein | Fremdschlüsselbeziehung |
Methode | Gespeicherte Prozedur oder Funktion |
Hinweis
In den folgenden Beschreibungen wird davon ausgegangen, dass Sie über grundlegende Kenntnisse des relationalen Datenmodells und der relationalen Regeln verfügen.
LINQ zu SQL Entitätsklassen und Datenbanktabellen
In LINQ to SQL wird eine Datenbanktabelle durch eine Entitätsklasse dargestellt. Eine Entitätsklasse ist wie jede andere Klasse, die Sie erstellen können, mit der Ausnahme, dass Sie die Klasse mithilfe spezieller Informationen kommentieren, die die Klasse einer Datenbanktabelle ordnet. Sie erstellen diese Anmerkung, indem Sie ihrer Klassendeklaration wie im folgenden Beispiel ein benutzerdefiniertes Attribut (TableAttribute) hinzufügen:
Beispiel
[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
Nur Als Tabellen deklarierte Klasseninstanzen (d. h. Entitätsklassen) können in der Datenbank gespeichert werden.
Weitere Informationen finden Sie im Abschnitt "Table Attribute" von Attribute-Based Mapping.
LINQ to SQL-Klassenmember und Datenbankspalten
Zusätzlich zum Zuordnen von Klassen zu Tabellen legen Sie Felder oder Eigenschaften fest, die Datenbankspalten darstellen sollen. Zu diesem Zweck definiert LINQ to SQL das ColumnAttribute Attribut wie im folgenden Beispiel:
Beispiel
[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
Nur Felder und Eigenschaften, die Spalten zugeordnet sind, werden beibehalten oder aus der Datenbank abgerufen. Diejenigen, die nicht als Spalten deklariert werden, werden als vorübergehende Teile Ihrer Anwendungslogik betrachtet.
Das ColumnAttribute Attribut verfügt über eine Vielzahl von Eigenschaften, die Sie zum Anpassen dieser Elemente verwenden können, die Spalten darstellen (z. B. das Entwerfen eines Elements als Darstellung einer Primärschlüsselspalte). Weitere Informationen finden Sie im Abschnitt "Column Attribute" von Attribute-Based Mapping.
LINQ zu SQL-Assoziationen und Datenbank-Fremdschlüsselbeziehungen
In LINQ to SQL stellen Sie Datenbankzuordnungen (z. B. Fremdschlüssel zu Primärschlüsselbeziehungen) dar, indem Sie das AssociationAttribute Attribut anwenden. Im folgenden Codesegment enthält die Order
Klasse eine Customer
Eigenschaft mit einem AssociationAttribute Attribut. Diese Eigenschaft und ihr Attribut stellen die Order
Klasse mit einer Beziehung zur Klasse bereit Customer
.
Das folgende Codebeispiel zeigt die Customer
Eigenschaft aus der Order
Klasse.
Beispiel
[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
Weitere Informationen finden Sie im Abschnitt zu Zuordnungsattributen unter Attributbasierte Zuordnung.
LINQ-zu-SQL-Methoden und Datenbank-gespeicherte Prozeduren
LINQ to SQL unterstützt gespeicherte Prozeduren und benutzerdefinierte Funktionen. In LINQ to SQL ordnen Sie diese von der Datenbank definierten Abstraktionen den Clientobjekten zu, sodass Sie über den Clientcode in einer stark typisierten Weise darauf zugreifen können. Die Methodensignaturen ähneln möglichst genau den Signaturen der in der Datenbank definierten Prozeduren und Funktionen. Sie können IntelliSense verwenden, um diese Methoden zu ermitteln.
Ein von einem Aufruf einer zugeordneten Prozedur zurückgegebener Ergebnissatz ist eine Auflistung mit strikter Typzuordnung.
LINQ to SQL ordnet gespeicherte Prozeduren und Funktionen mithilfe der Attribute FunctionAttribute und ParameterAttribute den Methoden zu. Methoden, die gespeicherte Prozeduren darstellen, werden von denen unterschieden, die benutzerdefinierte Funktionen durch die IsComposable Eigenschaft darstellen. Wenn diese Eigenschaft auf false
(Standardeinstellung) festgelegt ist, stellt die Methode eine gespeicherte Prozedur dar. Wenn sie auf festgelegt true
ist, stellt die Methode eine Datenbankfunktion dar.
Hinweis
Wenn Sie Visual Studio verwenden, können Sie den objektrelationalen Designer verwenden, um Methoden zu erstellen, die gespeicherten Prozeduren und benutzerdefinierten Funktionen zugeordnet sind.
Beispiel
// 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
Weitere Informationen finden Sie in den Abschnitten "Function Attribute", "Stored Procedure Attribute" und "Parameter Attribute" von Attribute-Based Mapping and Stored Procedures.