public partial class TabLiveDomainService : LinqToEntitiesDomainService<TabLiveEntities>
{
/*************************************************/
/********************* CUSTOMER ******************/
/*************************************************/
// TODO:
// Consider constraining the results of your query method. If you need additional input you can
// add parameters to this method or create additional query methods with different names.
// To support paging you will need to add ordering to the 'CustomerTable' query.
public IQueryable<CustomerObject> GetCustomerTable()
{
return this.ObjectContext.CustomerTable.OrderByDescending(p => p.Title);
}
public void InsertCustomerObject(CustomerObject customerObject)
{
if ((customerObject.EntityState != EntityState.Detached))
{
this.ObjectContext.ObjectStateManager.ChangeObjectState(customerObject, EntityState.Added);
}
else
{
this.ObjectContext.CustomerTable.AddObject(customerObject);
}
}
|
|
Ich habe auch nur einen User für alle Anwender mit dem ich auf die Datenbank zugreifen kann, so dass ich leider nicht einfach nur das default_schema des datenbank-users setzen kann.
|
|
|
|
|
"Ziemlich heißes Pflaster" trifft es hier sehr genau und das wollte ich durch diesen Kommentar nur nochmals unterstreichen. Ich würde es jedenfalls vermeiden irgendwie zu tricksen, wenn unterm strich kein Ergebnis heraus kommt, das rock-solid ist und auch einem Update des Entity Framework standhält.
– Torsten Weber 19.02.2011
|
||
|
Du hast Recht, "jeder User" sollte hier jeder "Benutzer" im Sinne von Mandant oder Kunde, der einen SaaS-Vertrag abgeschlossen hat, heißen.
– ampersand 19.02.2011
|
||
|
Die Mapping-Konfiguration liegt im .edmx file in xml Form. Ob man diese tatsächlich in ein externes File auslagern und dynamisch je nach User, das richtige Einladen kann, muss ich noch untersuchen. Auf Anhieb konnte ich die Datei im Deploy Package nicht finden. Eine Ide wäre es auf jeden Fall.
– ampersand 23.02.2011
|
||
|
Bzgl. des Shared Schema Ansatzes: Das Problem ist hierbei aus unserer Sicht, dass es in der Praxis immer wieder mal vorkommen wird, dass die Daten eines Users durch ein backup ersetzt werden müssen. Beim Shared Schema bedeutet das faktisch, dass alle anderen User auf dieser Datenbank auch betroffen sind, da beim Löschen der alten Datensätze des Users und beim Einladen der Backup-Datensätze die tabelle faktisch gesperrt werden muss - oder zumindest die Indizes temporär abgehängt werden und danach neu generiert werden müssen.
– ampersand 23.02.2011
|
||
|
Fortsetzung vorheriger Kommentar:
Das wäre für uns nur dann eine Lösung, wenn alle anderen Wege definitiv nicht funktionieren. Zudem mögen es einige Kunden nicht, wenn ihre Daten in den selben Tabellen liegen wie die Daten anderer Benutzer. Da bietet die Schema-Tabellen Variante schon etwas mehr Sicherheit und erleichtert uns die Administration. – ampersand 23.02.2011
|
||
|
Zur Umstellung unserer lokalen Windows-Software auf ein SaaS modell haben wir lange Für und Wider diskutiert und uns schließlich für SL4 entschieden. WCF-RIA und EF sind die ersten Schritte, eine DB-Anbindung zu bauen, die sich für ein kleines Team wie unseres einfach pflegen lässt. Ob die Lösung sinnvoll und umsetzbar ist, werden wir versuchen herauszufinden. Die Clientseitige Anwendungsentwicklung mit SL4 ist jedenfalls sehr produktiv und war daher richtig. Der DB-Zugriff muss noch sinnvoll gelöst werden. Wenn wir das schaffen ob mit oder ohne EF, können wir gerne in der dotnetpro berichten.
– ampersand 23.02.2011
|
|
|
|
Hallo Dirk, so wie ich diese Plattform hier verstehe, sind „Antworten“ gemeint als „Antworten auf / Lösungen für die gestellte Frage“. Für „Antworten auf Antworten“ sind die Kommentare gedacht. Von daher wäre es vielleicht besser gewesen, Du hättest einen Teil Deines Textes als Ergänzung Deiner ursprünglichen Frage angefügt (per Edit-Funktion) und den Rest als Kommentare zu den Antworten von Torsten und mir.
– Matthias Hlawatsch 19.02.2011
|
||
| 1 |
Zu den XAP-Dateien: wenn ich nicht gerade komplett auf der Leitung stehe, dann läuft Euer DomainService und damit der ObjectContext doch auf dem Server und ist somit nicht Teil der XAP-Datei, sondern des dort deployten WCF-Dienstes. Und dort ist es zumindest theoretisch möglich (z.B. wenn der Dienst als Singleton konfiguriert ist), wenn auch nicht unbedingt wahrscheinlich, dass die gleiche Instanz mehrere User bedient.
Zu den anderen Punkten nehme ich in meiner Antwort Stellung. – Matthias Hlawatsch 19.02.2011
|
|
|
Okay, das war mir nicht klar, dass man nur kommentieren soll oder den Ausgangsbeitrag editieren. Ist schon etwas ungewöhnlich, da man dann sehr lange Beiträge bekommt, die dann auch nicht mehr so richtig in der zeitlichen Abfolge stehen. Ich schreibe mal ein Feedback/Vorschlag für eine bessere Erläuterung der bedienung von Codekicker. in den Feedback-Bereich
– ampersand 23.02.2011
|
||
|
Matthias,
Du hast natürlich recht, dass der Domain Service auf dem Server läuft, da stand ich wohl auf dem Schlauch ;-) Das testen wir in Kürze auf einem externen Server, dann werden wir sehen ob der DomainService singleton ist oder nicht. Auf jeden Fall ein wichtiger Hinweis. – ampersand 23.02.2011
|