Ich habe eine etablierte SQL Server-Datenbank eingerichtet. Ich habe dann ein Entity Framework-Modell in einer Konsolenanwendung generiert, um etwas Auswahl, Bearbeitung und Hinzufügen zur Datenbank zu testen. Alles ist gut gegangen.Entity Framework auf verschiedenen Projekten - sparen?
Ich bin jetzt mehr in Richtung meiner endgültigen physischen Gestaltung meiner WinForms und WebApp. Also habe ich beschlossen, das Projekt in separaten Projekten zu machen. Ich habe das Entity Framework in ein Data-Projekt verschoben, ein Services-Projekt erstellt und meine Konsolen-App immer noch als Testanwendung (alles in derselben Lösung).
Ich habe eine ClassLib mit Datenübertragungsobjekten, die zwischen meinen Layern übergeben werden. Meine GUI-Ebene und meine Service-Ebene kennen also das Entity Framework nicht. Ich habe Helfermethoden in meinem EF Projekt, das die EF-Daten in Liste usw. konvertieren ...
Eg einer Hilfsmethode:
using ClassLib;
namespace Data
{
public class PayeeDAL : EntityBase
{
public static List<PayeeDto> GetPayees()
{
var payees = (from payee in Db.payees
select payee).ToList();
List<PayeeDto> reply = new List<PayeeDto>();
foreach (var pa in payees)
{
PayeeDto p = new PayeeDto
{
PayeeId = pa.payee_id,
Name = pa.name,
Deleted = pa.deleted == null
};
reply.Add(p);
}
return reply;
}
}
}
Und mein Datentransferobjekt sieht wie folgt aus:
namespace ClassLib
{
public class PayeeDto
{
public int PayeeId { get; set; }
public string Name { get; set; }
public bool Deleted { get; set; }
}
}
Also, meine Auswahl funktioniert gut mit diesem Design ... aber ... habe keine Ahnung, wie mit dem Speichern umzugehen.
In meiner Konsolenanwendung, wenn die EF mir zur Verfügung stand, habe ich dies:
db.AddToaccount_transaction(ac);
account_transaction_line atl = new account_transaction_line
{
amount = amount,
cost_centre =
db.cost_centre.FirstOrDefault(
cc => cc.cost_centre_id == costcentreid),
sub_category =
db.sub_category.First(
sc => sc.sub_category_id == subcategoryId),
account_transaction = ac,
budget = db.budgets.FirstOrDefault(b => b.budget_id == budgetid)
};
db.AddToaccount_transaction_line(atl);
}
db.SaveChanges();
Aber jetzt habe ich keinen Zugriff auf .AddTo .... und .SaveChanges ... In Meine Konsolen-App, ich würde ein übergeordnetes Objekt erstellen und dann ein paar untergeordnete Objekte hinzufügen ... und dann die untergeordneten Objekte zum übergeordneten Objekt hinzufügen und speichern.
Aber wie würde dies in meiner neuen Struktur getan werden? Ich denke, ich würde eine Save-Methode in jeder meiner Hilfsklassen haben ... Und dann eine Liste <> der untergeordneten Objekte, zusammen mit einer einzigen übergeordneten Klasse auf die Speichermethode übergeben ... und dann die Dtos umwandeln zu EF-Modellen, und speichern Sie es dann auf diese Weise?
Ist das ein akzeptabler Plan?
Das wäre toll, wenn Sie zeigen coul ein Beispiel. Vielen Dank. – Craig
bearbeitet meine Antwort, hoffe ich habe nichts vergessen .. – AyKarsi
Ich bin nicht ganz verständnisvoll - also ich suchte mehr und stieß auf ein Tutorial, das eine Person zeigte, die eine EF-App, mit einer Konsolenanwendung. Sie referenzierte das EF-Projekt direkt aus der Konsolenanwendung. Das ist alles einfach, aber ... es scheint falsch. Sicherlich sollte es eine Service-Schicht geben und keine Interaktion zwischen dem GUI-Projekt und dem EF-Projekt, oder? – Craig