Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von t0ms3n
Thema: Wert an Form2 übergeben
Am im Forum: GUI: Windows-Forms

Deine Klasse heißt Info und nicht Form.

Thema: WebApi + OData - $filter und Co
Am im Forum: Datentechnologien

Hallo zusammen,

resultierend aus Partielle Datenbankupdates mit dem EF schaue ich mir aktuell WebApi + OData näher an.
In diesem Zusammenhang würde mich allerdings interessieren wie Implementierungen aussehen, wenn eben die Datenquelle kein IQueryable unterstützt.

Bisher komme ich zu dem Schluss, dass man die QueryOptions nutzen muss und sich diese für die Datenquelle eben entsprechend aufbereitet z.B. ein entsprechende WHERE konstruiert und alles was man eben nicht unterstützen will/kann nicht zulassen. Gibt es noch weitere Wege?

Mich würden grundsätzlich Projekte/Artikel interessieren, wo eben dies oder ähnliches umgesetzt wurde. Kennt jemand ggf. (ein) entsprechendes Projekt auf GitHub oder den anderen üblichen verdächtigen?

Besten Dank

Thema: Benutzername auf Windows-Share nach Client-Reboot unzulässig obwohl er vorher funktionierte
Am im Forum: Netzwerktechnologien

Ich sehe auch keine Verbindung zu .NET, Entwicklung oder sonstigem. Daher kann ich gut verstehen, dass es OffTopic ist.

Thema: Eigene User Berechtigung für die Anwendung
Am im Forum: Grundlagen von C#

Dann musst Du in deinem Programm entsprechend die nötigen Anmeldeinformationen hinterlegen (oder von irgendwo Abrufen) und die nötigen Aufrufe impersonifizieren.

Klingt für mich aber eher so, als bräuchtest Du z.B. einen Webservice welcher mit dem "AnwendungsBenutzer" läuft und dem Client die gewünschten Informationen liefert.

Thema: Eigene User Berechtigung für die Anwendung
Am im Forum: Grundlagen von C#

Zitat von ck82
Der Client greift nur auf seine Anwendung zu ohne Berechtigung für den Ordner.

Aber genau da liegt doch dein Problem.

Mach ne Webanwendung

Thema: Eigene User Berechtigung für die Anwendung
Am im Forum: Grundlagen von C#

Wie soll der User ohne Berechtigung auf einen Ordner zugreifen!?

Thema: Überschreiben einer virtual Methode aus einer anderen DLL
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Was heißt denn erweitern? Vielleicht helfen dir auch Extension Methods weiter!?

Thema: Zwei Dataset in einer Spalte darstellen
Am im Forum: Datentechnologien

Oder eben vorher nicht zwei Statements absetzen sondern entsprechend z.B. mit UNION arbeiten (wie heißt das ganze in Oracle?).

Thema: Elemente aus String auslesen bzw. extrahieren
Am im Forum: Grundlagen von C#

das Ziel ist aber nicht, dass wir es verstehen, sondern dass Du es verstehst.

Du kannst bei Split entsprechend die Zeichen(ketten) angeben, bei denen getrennt werden soll. In deinem Fall wäre dies also das ;.

Danach erhält deine Variable split entsprechend viele Einträge. Auf diese kannst Du dann z.B. per Index zugreifen.

Thema: Elemente aus String auslesen bzw. extrahieren
Am im Forum: Grundlagen von C#

Dann musst Du den Inhalt entsprechend aufteilen und dann die gewünschten Elemente verwenden.

Zerteilen kannst Du einen String mit Split.

Thema: Neue Zeilen in SQL-Datenbank einfügen
Am im Forum: Datentechnologien

Dann wäre es aber höchst unwahrscheinlich, dass das Update/Insert mit einem

Fehler
The multi-part identifier "Pers.-Nr" could not be bound.


knallt.

Thema: Welches Tutorial für WPF?
Am im Forum: Grundlagen von C#

Du könntest Dir z.B. den Abschnitt in http://openbook.rheinwerk-verlag.de/visual_csharp_2012/1997_18_001.html#dodtp34972f67-6c1a-406f-a91d-ec8ff67058f9 ansehen.

Thema: Wie kann man feststellen, wer im Netzwerk gerade mein Programm nutzt?
Am im Forum: Netzwerktechnologien


Aber wenn jemand bei 1+1 auf 3 kommt, dann ist doch das Problem, das der Rechenweg falsch ist. Da hilft es doch nur, wenn man demjenigen aufzeigt, was die korrekt Lösung ist und wie der Weg dahin ist. Oder?


Ansonsten ist eine Möglichkeit eben genau das was Bernd geschrieben hat. Das muss keine Datenbank sein.

Genauso könnte dort nur eine Textfile liege, welche die aktuell gültige Versionsnummer enthält. Deine Applikation kann dann nur gestartet werden, wenn diese mit der der Anwendung übereinstimmt. Dann würdest Du eben keine weiteren Starts zulassen. Irgendwann sind dann deine Dateien vielleicht nicht mehr im Zugriff.

Oder aber du erzeugst eine Ordnerstruktur in dem die Versionen liegen. Der Aufruf erfolgt über ein Shortcut, welches Du anpasst, wenn es eine neue Version gibt.

Dennoch schließe ich mich hier FZelle und Abt an, dass das direkte Ausführen von Software auf dem Netzlaufwerk ein No-Go ist.

Thema: Wie kann man feststellen, wer im Netzwerk gerade mein Programm nutzt?
Am im Forum: Netzwerktechnologien

Hast Du nun das Problem, dass du Dateien nicht austauschen kannst, weil diese gerade in Verwendung sind oder dass Du nicht weißt, wer welche Version installiert hat?

Thema: Neue Zeilen in SQL-Datenbank einfügen
Am im Forum: Datentechnologien

Naja, dass musst Du ja irgendwann in deinem DataSet angegeben habe. Du kannst dort den entsprechenden Adapater auswählen und siehst in den Eigenschaften die unterschiedlichen Statements.

Thema: Partielle Datenbankupdates mit dem EF
Am im Forum: Datentechnologien

Das die Authorisierung nicht im DAL passiert sollte selbstverständlich sein. Ich hoffe, dass dies nicht so zwischen den Zeilen/Posts steht :).

Aber sprechen wir hier nicht dann dennoch wieder von z.B. einem "SimpleProduct" und von mir aus einem zusätzlichen "FullProduct" Endpoint?

Wobei SimpleProduct für die beschriebene 3rd Party und FullProduct eben für z.B. die Hauptanwendung freigegeben wird?
Das würde mich dann aber wieder zum Eingangspost zurückführen... Da dies letzten endes für das DAL nur ein partial Update der Gesamtentität ist!?

http://www.codeproject.com/Articles/990492/RESTful-Day-sharp-Enterprise-Level-Application wird dort nicht eben auch genau dies so beschrieben? (lediglich ohne Rückgabe des Objekts bei PUT/PATCH/POST)

Thema: Partielle Datenbankupdates mit dem EF
Am im Forum: Datentechnologien

Ja, ggf. wäre auch SDK ein passender Ausdruck. Die Bereitstellung wird jedoch sehr wahrscheinlich via Web (Intranet) geschehen.

Wie gesagt möchte ich zumindest den DAL ggf. auch zukünftig als einfache Library für die Hauptapplikation nutzen (oder auch komplett über die "öffentliche" API/SDK).

Was ich wie gesagt vermeiden möchte ist, dass 3rd-Party Nutzer Daten ändern kann, die nicht dafür vorgesehen sind. Diese Gefahr sehe ich eben, wenn ich diesen immer den vollständigen Datensatz zur gebe.

Falls es irgendwie einen Unterscheid machen sollte... ich spreche hier nur von firmeninternen Applikationen die darauf zugreifen.

Thema: Neue Zeilen in SQL-Datenbank einfügen
Am im Forum: Datentechnologien

Kannst Du uns das Statement zeigen?

Thema: Neue Zeilen in SQL-Datenbank einfügen
Am im Forum: Datentechnologien

Bitte verwende die Code-Tags.

Multi-Part bedeutet in dem Zusammenhang, dass dein Updatestatement mehrere Tabellen beinhaltet und in mehreren Tabellen die Spalte "Pers.-Nr" vorkommt. Du musst diese im Statement also vollständig angeben z.B. Tabelle1.[Pers.-Nr].

Thema: WinForms - Was für ein Steuerelement für tabellarische Auflistung benutzen?
Am im Forum: GUI: Windows-Forms

Aber die Controls zeigst Du ja nicht zum gleichen Zeitpunkt an. Es ist also kein Problem dies so zu tun. Auch die Größe deiner .exe ist erstmal völlig egal.

Thema: Partielle Datenbankupdates mit dem EF
Am im Forum: Datentechnologien

Ich lasse mich gerne überzeugen, bin es aber noch nicht :).
Ich kann auch nicht bestätigen, dass der DAL die DTO kennt bzw. damit arbeitet. Das Repository kennt nur Product. Das Übertragen der Eigenschaften von der DTO auf das DAL-Model übernimmt an der Stelle ja der FooService.

Zitat
Das ganze Objekt heisst i.d.R. ohne Navigation-Properties bzw. diese wenn dann explizit.

Folglich führt eine unbedachte Nutzung also immer zu einem "SELECT * FROM x"? Das verursacht irgendwie Bauchschmerzen, wenn ich doch weiß, dass der Rest des Models den Benutzer gar nicht interessiert. Oder versteh ich hier etwas falsch?

Thema: Partielle Datenbankupdates mit dem EF
Am im Forum: Datentechnologien

Hmmm, ich bin nicht an eine REST API gebunden. Und in wiefern widerspräche ein DTO, welche ja vollständig geliefert werden würde, dem Grundsatz, dass das ganze Objekt geliefert wird?

Das ganze Objekt kann ja nicht immer den vollen Datenstand aus der Datenbank bedeuten!?

Thema: Partielle Datenbankupdates mit dem EF
Am im Forum: Datentechnologien

Darüber, dies mit Vererbung zu erschlagen, habe ich tatsächlich noch nicht nachgedacht. Allerdings sollten in diesem Moment ja auch Inserts für die "Partial"-Entity verboten werden. Wobei dies ja auch kein gewünschtes/benötigtes Verhalten ist.

Es geht mir z.B. darum, dass der API Konsument auch nur die Felder ändern kann, die an der entsprechenden Stelle vorgesehen sind. Da klang es für mich plausibel, diesem auch nur diese Felder anzubieten.

Ein eigenes PartialModel würde welche Auswirkungen habe?:
- eigenes Repository (ohne Insert, ggf. ohne Delete)
- im Fall von z.B. Dapper zusätzliche Selects sofern man es nicht bei "SELECT * FROM <tableName>" belässt

Thema: Partielle Datenbankupdates mit dem EF
Am im Forum: Datentechnologien

Ich führe mal anhand eines Beispiels aus, was genau ich mit partial meine.
Im Beispiel wird SQLite, Mapster und Dapper genutzt.

Folgendes Repository sei gegeben:


public class ProductRepository : IRepository<Product>
    {
        private IDbConnection _connection;

        public ProductRepository(IDbConnection connection)
        {
            _connection = connection;
        }

        public Product Get(int id)
        {
            return _connection.Query<Product>("SELECT Id, Name, Description, IsActive, CreateDate, VendorId FROM Product WHERE Id = @id", new { id = id }).SingleOrDefault();
        }

        public bool Update(Product entity)
        {
            return _connection.Execute("UPDATE Product SET Name = @Name, Description = @Description, IsActive = @IsActive, VendorId = @VendorId WHERE Id = @Id", entity) > 0;
        }
}

Die Klasse Product besitzt natürlich entsprechend alle nötigen Properties.

Dazu gibt es den FooService.


    public class FooService
    {
        IRepository<Product> _productRepository;

        public FooService(IRepository<Product> productRepository)
        {
            _productRepository = productRepository;
        }

        public Product GetFull(int productId)
        {
            var fullItem = _productRepository.Get(productId);
            return fullItem;
        }

        public DTO.ProductUpdateActive GetActiveProduct(int productId)
        {
            // Vollständiges Item abrufen, nicht ganz so schön, da natürlich unnötig viel abgefragt wird...
            var fullItem = _productRepository.Get(productId);
            // Mappen des Products auf ProductUpdateActive (enthält nur Id, Name und IsActive)
            var partialItem = TypeAdapter.Adapt<DTO.ProductUpdateActive>(fullItem);

            return partialItem;
        }

        public bool UpdateActiveProduct(DTO.ProductUpdateActive item)
        {
            // Vollständiges Item abrufen, nicht ganz so schön, da natürlich unnötig viel abgefragt wird...
            var fullItem = _productRepository.Get(item.Id);
            // Mappen der Properties von ProductUpdateActive (enthält nur Id, Name und IsActive) zurück ins volle Item
            var updatedFullItem = TypeAdapter.Adapt<DTO.ProductUpdateActive, Product>(item, fullItem);

            return _productRepository.Update(updatedFullItem);
        }
    }

Und so würde z.B. eine Verwendung aussehen.


 class Program
    {
        static Container container;

        static void Main(string[] args)
        {
            // Init Container
            Config();
            var foo = container.GetInstance<FooService>();

            var full = foo.GetFull(2);
            Console.WriteLine(string.Format("Full ### Id: {0}, Name: {1}, IsActive: {2}", full.Id, full.Name, full.IsActive));

            var partial = foo.GetActiveProduct(2);
            Console.WriteLine(string.Format("Partial ### Id: {0}, Name: {1}, IsActive: {2}", partial.Id, partial.Name, partial.IsActive));
            partial.IsActive = !partial.IsActive;
            Console.WriteLine(string.Format("Partial ### Id: {0}, Name: {1}, IsActive: {2}", partial.Id, partial.Name, partial.IsActive));

            var success = foo.UpdateActiveProduct(partial);
            full = foo.GetFull(2);
            Console.WriteLine(string.Format("Full ### Id: {0}, Name: {1}, IsActive: {2}", full.Id, full.Name, full.IsActive));
        }
...
}

Schöner fände ich natürlich, wenn tatsächlich nur die Felder geupdated werden, die auch im ProductUpdateActive vorhanden sind und genauso auch nur diese abgefragt werden.

Das EF könnte an dieser Stelle dies ja durch das ChangeTracking entsprechend erledigen und nur IsActive updaten.

Im Anhang das volle Beispielprojekt.

Thema: Partielle Datenbankupdates mit dem EF
Am im Forum: Datentechnologien

Das Dapper nur ein MicroORM ist, ist mir wohl bewusst, aber es geht mir ja auch nicht (direkt) um den Featureumfang etc.

Inwiefern kann mir FluentMigrator weiterhelfen? Ich möchte ja nicht die aktuelle Datenbank ändern oder sonstiges.

Thema: Partielle Datenbankupdates mit dem EF
Am im Forum: Datentechnologien

verwendetes Datenbanksystem: MSSQL

Hallo zusammen,

ich stelle aktuell mal wieder eine API für den Zugriff auf eine Applikation/Datenbank zur Verfügung. In der Hauptapplikation selbst gibt es leider kein entsprechendes DAL, welches ich dafür verwenden möchte. Die benötigte API muss dabei allerdings aktuell nur einen geringen Umfang des Gesamtsystems abdecken. Als Seiteneffekt möchte ich jedoch langfristig das aktuelle DAL durch diese API/DAL ersetzen.
Zuletzt habe ich für einen ähnlichen Task das EF (6.x) genutzt und war damit auch recht zufrieden, wobei mir aber gerade das Verhalten im disconnected Bereich dort doch immer mal wieder Schwierigkeiten bereitet hat.

Aktuell mache ich mir Gedanken wie partielle Updates sauber und dennoch bequem abgebildet werden können. Gefunden habe ich dazu hauptsächlich die Herangehensweise, dass an den entsprechenden Properties der State geändert wird. (z.B. http://stackoverflow.com/questions/12871892/entity-framework-validation-with-partial-updates )
Alternativ sieht für mich flexibler und sauberer aus mit entsprechenden DTOs zu arbeiten und diese einfach zu mappen.

Wie führt ihr im Normalfall partielle Updates durch?

Ich wollte mir in diesem Zusammenhang ggf. auch Alternativen wie z.B. Dapper näher ansehen. Soweit ich dies dort sehe, wäre es hier nun wieder notwendig entsprechende Updates zu schreiben oder natürlich passende Extensions ( z.B. http://www.bradoncode.com/blog/2012/12/creating-data-repository-using-dapper.html )

Für sonstige Anregungen bin ich natürlich auch offen :).

Thema: Wie designe ich die Datenbank für ein Quiz mit drei verschiedenen Fragearten?
Am im Forum: Datentechnologien

Funktioniert ein Typed Dataset überhaupt in Verbindung mit MS Access?

Thema: EF 7 und Sql Server - add Migration Fehler
Am im Forum: Datentechnologien

Auf z.B. Seite 17 wird aber z.B. entsprechend

~/ConsoleApp/ $ dnx ef migrations add MyFirstMigration
gezeigt.

-- Edit:
Bzw. entsprechend für ASP.NET 5 auf Seite 27.

Thema: Speichern von Informationen bei WindowsPhone Apps
Am im Forum: Rund um die Programmierung

Okay klar, ich bezog mich dabei auf Datenbanken wie z.B. SQLite.

Thema: Speichern von Informationen bei WindowsPhone Apps
Am im Forum: Rund um die Programmierung

Dir stehen dabei alle Möglichkeiten offen. Speichern in einer Datei, Datenbank etc.

Du musst nur entsprechend die Berechtigung durch den Nutzer dafür einholen. (Im Manifest)