2 Stimmen

LINQ-Modellierung Automatisches Abrufen von Daten über EntityRef

Ich verwende LINQ, um meine Datenbank zu modellieren, aber ich schreibe es von Hand (Steve Sanderson empfiehlt dies in seinem ASP.NET MVC-Buch). Was ich wissen muss, ist, was passiert, wenn Sie eine EntityRef erstellen, und wie sie referenziert wird. Wenn ich meine Abfragen manuell erstellen (ohne LINQ), aber LINQ verwenden, um es zu modellieren, und ich bringe nur die ID von etwas zurück, dann verweisen Sie auf die tatsächliche Tabellenspalte mit EntityRef in der Ansicht, tut es die Verknüpfung, oder tut es neu abfragen der Datenbank für dieses Bit der Informationen?

Um die Dinge zu klären, wenn ich dies in meinem Repository habe:

public IEnumerable<MyTable> ListMyTable(int? myColumnVar)
{
  string query = "SELECT * FROM MyTable WHERE MyColumn = {0}";

  return this.ExecuteQuery<MyTable>(query, myColumnVar);
}

und dann mache ich in meinem Controller folgendes:

IEnumerable<MyTable> mytables = _contractsControlService.ListMyTable(1);

return View(mytables);

dann mache ich aus meiner Sicht Dinge wie

<%=tbl.Ref.MyColumn %>

Ich verweise auf etwas, das vom LINQ-Modell festgelegt wurde, aber nicht tatsächlich in der Tabellenausgabe enthalten ist. Wie erhält es diese Daten?

Um die Dinge weiter zu klären, verwenden wir Systeme, die ultimative Geschwindigkeit erfordern, so dass die LINQ-to-SQL ist zu langsam für uns, daher sind wir mit direkten Abfragen in unserem Repository. Ich hätte nichts dagegen, diese EntityRef-Sache zu verwenden, wenn ich nur wüsste, was darunter passiert.

2voto

Martin Liversage Punkte 100306

Wahrscheinlich haben Sie den objektrelationalen Designer verwendet, um eine Entitätsklasse für die Entität Ref und eine Assoziation zwischen MyTable und der Entität Ref zu erstellen. Sie können dies auch manuell tun, indem Sie die entsprechenden Entitätsklassen erstellen und Attribute verwenden, um die Klassen dem Datenbankschema zuzuordnen. Sie können die Details in So geht's: Anpassen von Entitätsklassen mit dem Code-Editor (LINQ to SQL) auf MSDN.

In Ihrem generierten (oder handgeschriebenen) Code werden Sie einige Attribute finden:

[Table(Name="dbo.Ref")]
public partial class Ref : INotifyPropertyChanging, INotifyPropertyChanged

y

public partial class MyTable: INotifyPropertyChanging, INotifyPropertyChanged
{

  [Association(Name="Ref_MyTable", Storage="_Ref", ThisKey="RefId",
    OtherKey="Id", IsForeignKey=true)]
  public Ref Ref
  {
     get
     ...

Die Entitätsklassen in Kombination mit den Attributen ermöglichen es dem Linq-to-Sql-Framework, Entitätsklassen direkt aus der Datenbank abzurufen.

Wenn Sie das von Linq-to-Sql erzeugte SQL überwachen wollen, können Sie die DataContext.Log Eigentum:

context.Log = Console.Out;

Wenn Sie in Ihrem Beispiel von MyTable zu Ref navigieren, wird wahrscheinlich SQL in dieser Form erzeugt:

SELECT Id, Field1, Field2, Field3
FROM Ref
WHERE Id = @RefId

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X