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 Ahrimaan
Thema: [gelöst]DataGrid RowDetails werden nicht angezeigt
Am im Forum: GUI: WPF und XAML

Hallo zusammen,
ich habe ein Problem mit einer View und dem Binding :

<UserControl x:Class="RAE.Client.View.ShowTaskOverviewView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             xmlns:c="clr-namespace:Microsoft.Windows.Controls;assembly=WPFToolkit" mc:Ignorable="d" 
             d:DesignHeight="360" d:DesignWidth="797">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="80*"/>
            <ColumnDefinition Width="180"/>
        </Grid.ColumnDefinitions>
        <Expander Grid.Column="2" ExpandDirection="Down" Header="Suchoptionen">
            <Expander.Content>
                <Grid>
                    
                </Grid>
            </Expander.Content>
        </Expander>
        <c:DataGrid Grid.Column="0"  Grid.Row="0" ItemsSource="{Binding Persons}" AlternatingRowBackground="Aqua" CanUserReorderColumns="True" CanUserSortColumns="True"
                    CanUserResizeColumns="True" IsReadOnly="True" SelectedItem="{Binding CurrentItem}" ColumnHeaderStyle="{StaticResource ResourceKey=EmployeeGridColumnHeader}" 
                    CellStyle="{StaticResource ResourceKey=EmployeeGridCellStyle}">
            <c:DataGrid.RowDetailsTemplate>
                <HierarchicalDataTemplate ItemsSource="{Binding Path=Tasks}">
                    <Grid>
                         <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="30"/>
                            <ColumnDefinition Width="*"/>
                        </Grid.ColumnDefinitions>
                        <c:DataGrid Grid.Column="1">
                            <c:DataGrid.Columns>
                                <c:DataGridTemplateColumn Header="Name">
                                    <c:DataGridTemplateColumn.CellTemplate>
                                        <DataTemplate>
                                            <TextBlock Text="{Binding Name}"/>
                                        </DataTemplate>
                                    </c:DataGridTemplateColumn.CellTemplate>
                                </c:DataGridTemplateColumn>
                                <c:DataGridTemplateColumn Header="Erstellt Am">
                                    <c:DataGridTemplateColumn.CellTemplate>
                                        <DataTemplate>
                                            <TextBlock Text="{Binding CreateDate}"/>
                                        </DataTemplate>
                                    </c:DataGridTemplateColumn.CellTemplate>
                                </c:DataGridTemplateColumn>
                                <c:DataGridTemplateColumn Header="Erstellt Von">
                                    <c:DataGridTemplateColumn.CellTemplate>
                                        <DataTemplate>
                                            <TextBlock Text="{Binding CreatedFrom,Path=Name}"/>
                                        </DataTemplate>
                                    </c:DataGridTemplateColumn.CellTemplate>
                                </c:DataGridTemplateColumn>
                                <c:DataGridTemplateColumn Header="Geschlossen von">
                                    <c:DataGridTemplateColumn.CellTemplate>
                                        <DataTemplate>
                                            <TextBlock Text="{Binding ClosedBy,Path=Name}"/>
                                        </DataTemplate>
                                    </c:DataGridTemplateColumn.CellTemplate>
                                </c:DataGridTemplateColumn>
                                <c:DataGridTemplateColumn Header="Geschlossen am">
                                    <c:DataGridTemplateColumn.CellTemplate>
                                        <DataTemplate>
                                            <TextBlock Text="{Binding ClosedDate}"/>
                                        </DataTemplate>
                                    </c:DataGridTemplateColumn.CellTemplate>
                                </c:DataGridTemplateColumn>
                            </c:DataGrid.Columns>
                        </c:DataGrid>
                    </Grid>
                    
                </HierarchicalDataTemplate>
            </c:DataGrid.RowDetailsTemplate>
            <c:DataGrid.Columns>

                <c:DataGridTemplateColumn Header="ID" Visibility="Hidden">
                    <c:DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding Path=ID}" />
                        </DataTemplate>
                    </c:DataGridTemplateColumn.CellTemplate>

                </c:DataGridTemplateColumn>

                <c:DataGridTemplateColumn Header="Nachname" Width="150">
                    <c:DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding Path=Nachname}" TextAlignment="Left"  VerticalAlignment="Center" FontFamily="Courier New"/>
                        </DataTemplate>
                    </c:DataGridTemplateColumn.CellTemplate>
                </c:DataGridTemplateColumn>

                <c:DataGridTemplateColumn Header="Vorname" Width="150">
                    <c:DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding Path=Vorname}" TextAlignment="Left" VerticalAlignment="Center" FontFamily="Courier New"/>
                        </DataTemplate>
                    </c:DataGridTemplateColumn.CellTemplate>
                </c:DataGridTemplateColumn>

                <c:DataGridTemplateColumn Header="Personalnummer" Width="100">
                    <c:DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding Path=PersonalNummer}" TextAlignment="Left" VerticalAlignment="Center" FontFamily="Courier New"/>
                        </DataTemplate>
                    </c:DataGridTemplateColumn.CellTemplate>
                </c:DataGridTemplateColumn>
            </c:DataGrid.Columns>
        </c:DataGrid>
    </Grid>
</UserControl>
Und das ViewModel:

using System.Linq;
using RAE.Client.Extensions;
using RAE.Client.Model;
using RAE.Client.Session;
using RAE.Data.Models;
using WpfBase;

namespace RAE.Client.ViewModel
{
    public class ShowTaskOverviewViewModel:BaseWorkspaceViewModel
    {
        public ShowTaskOverviewViewModel(int windowId) : base(windowId)
        {         
            if (DataManager.IsAdmin)
            {
                DataManager.Repository.GetAllEmployesCompleted += (s, e) =>
                {
                    Persons = new ThreadSafeObservableCollection<Model.EmployeeModel>();
                    if(e.Employees != null)
                        e.Employees.ForEach(p => Persons.Add(p.ToModel()));
                };
                DataManager.Repository.GetAllEmployeesAsync();
            }
            else
            {
                DataManager.Repository.GetAllEmployesByEmployeeCompleted += (s, e) =>
                {
                    Persons = new ThreadSafeObservableCollection<Model.EmployeeModel>();
                    if (e.Employees != null)
                        e.Employees.ForEach(p => Persons.Add(p.ToModel()));
                };
                DataManager.Repository.GetAllEmployeesByEmployeeAsync(DataManager.CurrentUser);
            }
            this.DisplayName = "Aufgabenübersicht";
            Tasks = new ThreadSafeObservableCollection<RAETask>();
        }

        public ShowTaskOverviewViewModel(int windowId,Employee emp)
            : base(windowId)
        {
            _persons = new ThreadSafeObservableCollection<Model.EmployeeModel>();
            this.DisplayName = "Aufgabenübersicht";
        }

        private EmployeeModel _currentItem;
        public EmployeeModel CurrentItem
        {
            get { return _currentItem; }
            set { _currentItem = value;FillTaskForEmployee(); OnPropertyChanged(() => CurrentItem); }
        }

        private ThreadSafeObservableCollection<Model.EmployeeModel> _persons;
        public ThreadSafeObservableCollection<Model.EmployeeModel> Persons
        {
            get { return _persons; }
            set { _persons = value;OnPropertyChanged(() => Persons); }
        }

        private ThreadSafeObservableCollection<RAETask> _tasks;
        public ThreadSafeObservableCollection<RAETask> Tasks
        {
            get { return _tasks; }
            set { _tasks = value;OnPropertyChanged(() => Tasks); }
        }

        private void FillTaskForEmployee()
        {
            Tasks.Clear();
            _currentItem.Tasks.ToList().ForEach(p => Tasks.Add(p));
            OnPropertyChanged(() => Tasks);
        }
    }
}
Wenn ich auf eine Row klicke erscheinen zwar die RowDetails aber nur die Header.
Es werden keine Daten angezeigt. Die Namen der Propertys passen aber alle.
Sieht jmd auf den ersten Blick, wo der Fehler liegt ?

Grüße

Thema: DataGrid mit TreeView Expander
Am im Forum: GUI: WPF und XAML

Ok werds mir anschauen, danke ^^

Thema: DataGrid mit TreeView Expander
Am im Forum: GUI: WPF und XAML

Leider ASP.NET ....

Thema: DataGrid mit TreeView Expander
Am im Forum: GUI: WPF und XAML

Also eine klassiche Master Detail Ansicht machen .. Ok Danke

Thema: DataGrid mit TreeView Expander
Am im Forum: GUI: WPF und XAML

Genau und es muss kostenlos sein ^^

Thema: DataGrid mit TreeView Expander
Am im Forum: GUI: WPF und XAML

Hallo zusammen,

ich suche ein Beispiel für folgendes Control :

Ein Datagrid mit einem Treeviewähnlichem Funktion :

Nach Klick auf das Expandieren Symbol , soll sich unter der Zeile ein Treeview Öffnen wo erweiterte Infos angezeigt werden.
Leider fällt mir auf die schnelle nicht ein, wie ich das realisieren könnte.

Anbei ein Bild wie ich mir das Vorstelle.

Grüße

P.S. RowDetails ist nicht erwünscht

Thema: WPF : Control Idee gesucht ähnlich PropertyGrid Designer
Am im Forum: GUI: WPF und XAML

Hi talla,
so trivial wie ich das geschrieben habe, würde ich es mir natürlich nicht machen ;-)
Wobei du recht hast, es scheint recht schwierig zu sein, diesen Wunsch zu erfüllen.

Theoretisch müsste ich einen Deisgner bauen, welcher aufgrund der angefügten Controls eine Datenstruktur baut.

Ob ich diesen Aufwand wirklich betreiben will/muss, dass steht in einem anderen Buch....

Dir/Euch fällt wahrscheinlich keine andere Möglichkeit ein, dieses Dilema zu lösen ?
Grüße

Thema: WPF : Control Idee gesucht ähnlich PropertyGrid Designer
Am im Forum: GUI: WPF und XAML

Hi talla,
ich würde, dass ganze PropertyGrid serialisieren und dann 1zu1 anzeigen lassen.

So spare ich mir die Datenstruktur um es so generisch wie möglich zu halten.

Grüße

Thema: WPF : Control Idee gesucht ähnlich PropertyGrid Designer
Am im Forum: GUI: WPF und XAML

Hallo zusammen,
ich möchte meinem Anwender die Möglichkeit geben in einem Tool gewisse Aufgaben zu definieren.
Dazu wollte ich ihm die Möglichkeit geben, ähnlich eines Property Grids, Propertys zu definieren.

Beispiel :
Der Anwender will eine neue Aufgabe erstellen.
Er definiert zB Ich rbauche Anrede , Nachname und Vorname

Anrede soll eine Combobox sein mit x Werten , Nachname eine TExtbox und Vorname eine Textbox.
Er soll also im Tool einen Designer nutzen.

Frage A.) Gibt es sowas schon und B.) wo ? ^^

Grüße

Thema: WPF : Style in Control und Style in Resource ungleich
Am im Forum: GUI: WPF und XAML

Hallo Michael,
genau das war es. Kannst du mir sagen, warum das so ist ? Im Grunde mache ich doch das selbe oder ?

Grüße

Thema: WPF : Style in Control und Style in Resource ungleich
Am im Forum: GUI: WPF und XAML

Hallo zusammen,

ich habe aus dem WPF Toolkit das DataGrid im Einsatz.
Im DataGrid definiere ich das aussehen der ColumHeader

<c:DataGrid Grid.Row="2" ItemsSource="{Binding Employees}" AlternatingRowBackground="Aqua" CanUserReorderColumns="True" CanUserSortColumns="True"
                    CanUserResizeColumns="True" IsReadOnly="True" SelectedItem="{Binding CurrentItem}">
            <c:DataGrid.ColumnHeaderStyle>
                <Style TargetType="{x:Type Primitives:DataGridColumnHeader}">
                    <Setter Property="ContentTemplate">
                        <Setter.Value>
                            <DataTemplate>
                                <TextBlock FontSize="10" Text="{Binding}" TextAlignment="Justify" TextWrapping="WrapWithOverflow">
                                    <TextBlock.RenderTransform>
                                        <TransformGroup>
                                            <RotateTransform Angle="-12"/>
                                        </TransformGroup>
                                    </TextBlock.RenderTransform>
                                </TextBlock>
                            </DataTemplate>
                        </Setter.Value>
                    </Setter>
                    <Setter Property="Height" Value="40"/>
                </Style>
            </c:DataGrid.ColumnHeaderStyle>

Das ganze wollte ich nun aber nicht im DataGrid sondern in meiner ResourceDictionary machen.
<c:DataGrid.ColumnHeaderStyle>
                <Style Resources="{StaticResource ResourceKey=EmployeeGridColumnHeader}"/>
            </c:DataGrid.ColumnHeaderStyle>

Also das selbe eingetragen und per Key drauf zugegriffen und prompt kriege ich die Fehlermeldung "Invalid Type" ......

Thema: WCF : Session Management und Client.Close
Am im Forum: Netzwerktechnologien

Hallo zusammen,
es wird bei WCF empfohlen bei dem Client den Aufruf zu machen und dann Client.Close() auszuführen.
Mein WCF Dienst braucht nun aber Sessions.
Wenn ich jedes mal den Client per New bei jedem Aufruf instanzieren muss, gehen da nicht die Sessions verloren ?
Grüße

Thema: [MVVM]Columns in Datagrid dynamisch erzeugen ?
Am im Forum: GUI: WPF und XAML

Eigtl. nutzt du das Datagrid um Daten an eine ObservableCollection zu binden.
Dann erzeugts du ein DataTemplate für die jeweiligen Items.

Das Datagrid reagiert dann auf Änderungen in der Collection und passt sich demnach an.

Grüße

Thema: [Erledigt]MVVM : Konstruktor wird 2x aufgerufen
Am im Forum: GUI: WPF und XAML

Ach ich bin ein Hammel:

Das Control hatte ein DataContext gesetzt.
Dadurch wurde der Konstruktor 2x aufgerufen....
Doof,
Kann geclosed werden ;-)

Thema: [Erledigt]MVVM : Konstruktor wird 2x aufgerufen
Am im Forum: GUI: WPF und XAML

Hi,
es geht um das BaseWorksapceViewModel und das Derivat LoginViewModel.

var loginView = new LoginViewModel();
           loginView.CloseRequest += (s, e) => Manager.ViewModels.Remove(loginView);
           loginView.DisplayName = "Login";
           Manager.ViewModels.Add(loginView);

Hier instanziere ich genau 1x das VM. Und trotzdem wird der Konstruktor 2x ausgeführt (von der Basis). Das der Konstruktor der Basis ausgeführt wird ist schon klar , nur nicht 2x ...

Thema: [Erledigt]MVVM : Konstruktor wird 2x aufgerufen
Am im Forum: GUI: WPF und XAML

Hallo zusammen,
ich habe ein Phänomen und ich weiß nicht wie ich das umschiffen soll:
Eine View kriegt beim Aufruf eine ID zugewiesen.
Diese View wird in ein Workspace geladen.
Nur leider wird der Konstruktor 2x aufgerufen :

ResourceDictionary :

    <DataTemplate DataType="{x:Type ViewModel:LoginViewModel}">
        <View:LoginView/>
    </DataTemplate>

Das Basismodel und ein Derivat davon

    public class BaseWorkspaceViewModel : WpfBase.BaseViewModel
    {
        public  BaseWorkspaceViewModel()
        {
            WindowId = Manager.GetNewWindowId();
        }

        public string DisplayName { get; set; }
        public int WindowId { get; private set; }
        private ICommand _closeCommand;
        public ICommand CloseCommand
        {
            get { return _closeCommand ?? (_closeCommand = new DelegateCommand(() => CloseRequest(this, new EventArgs()))); }
        }

        public event EventHandler<EventArgs> CloseRequest;
    }

    public class LoginViewModel:BaseWorkspaceViewModel
    {
        public LoginViewModel()
        {
            Username = Environment.UserName;
            _isLoading = false;
        }

        private bool _isLoading;
        public bool IsLoading
        {
            get { return _isLoading; }
            set { _isLoading = value;OnPropertyChanged(() => IsLoading); }
        }

        private string _username;
        public string Username
        {
            get { return _username; }
            set
            {
                _username = value;
                OnPropertyChanged(() => Username);
            }
        }

        private string _password;
        public string Password
        {
            get { return _password; }
            set { _password = value;OnPropertyChanged(() => Password); }
        }

        private string _message;
        public string Message
        {
            get { return _message;}
            set { _message = value;OnPropertyChanged(() => Message); }
        }

        private ICommand _loginCommand;
        public ICommand LoginCommand
        {
            get
            {
               return _loginCommand ?? (_loginCommand = new DelegateCommand(DoLogin));
                
            }
        }
        private void DoLogin()
        {
#if DEBUG
            Manager.IsLoggedIn = true;
            Manager.Repository.GetEmployeeCompleted += (s, e) => { Manager.CurrentUser = e.Result;
                                                                     IsLoading = false;
            Manager.RequestClose(this.WindowId);};
            Manager.Repository.GetEmployee(1);
            IsLoading = true;

            //CloseCommand.Execute(null);
#else

#endif

        }
    }

Und das MainView bzw. das Model.

   public class MainWindowViewModel:WpfBase.BaseViewModel
   {
       public MainWindowViewModel()
       {
           var loginView = new LoginViewModel();
           loginView.CloseRequest += (s, e) => Manager.ViewModels.Remove(loginView);
           loginView.DisplayName = "Login";
           Manager.ViewModels.Add(loginView);
       }

       private ObservableCollection<MainMenuItem> _menuItems; 
       public ObservableCollection<MainMenuItem> MenuItems { get { return _menuItems; } }

       public ObservableCollection<BaseWorkspaceViewModel> ViewModels { get { return Manager.ViewModels; } }

       protected void SetActiveWindowModel(BaseWorkspaceViewModel workspace)
       {
           ICollectionView collectionView = CollectionViewSource.GetDefaultView(Manager.ViewModels);
           if (collectionView != null)
               collectionView.MoveCurrentTo(workspace);
       }

    }

Der Konstruktor des BaseViewModels wird nun 2x augerufen : Einmal beim Konstruktor des MainWindowViewModels und dann beim Anzeigen der View...

Wat nu ?

Thema: Virtuelles Laufwerk als Datenbank-Schnittstelle
Am im Forum: Rund um die Programmierung

Microsoft SQL Server Denali : FileStreams ... verhält sich genauso wie eine Dateifreigabe.

Thema: Idee für Umsetzung gesucht: Datenmaske für Methodenparameter inkl. Validierung generieren
Am im Forum: Rund um die Programmierung

Hallo zusammen.
Mir fällt keine gescheite Idee für folgendes Szenario ein:
Man hat eine Liste von Personen. An diese Personen sind Aufgaben verknüpft.
zB Lege Benutzer in AD an.
Das ganze soll eine Art generisches Ticketsystem sein.

Beispiel : Admin legt für Benutzergruppe Mitarbeiterverwaltung einen Task an

    public class RAETask
    {
        public virtual int ID { get; set; }
        public virtual string Name { get; set; }
        public virtual RAETask RootTask { get; set; }
        public virtual ICollection<RAETask> Tasks { get; set; }
        public virtual string ExtendedInfo { get; set; }
        public virtual bool Closed { get; set; }
        public virtual DateTime CreateDate { get; set; }
        public virtual Employee CreatedFrom { get; set; }
        public virtual DateTime ClosedDate { get; set; }
        public virtual Employee ClosedBy { get; set; }
        public virtual Employee Employee { get; set; }
        public virtual EndTask LastTaskAction { get; set; }
        public virtual EmployeeGroup SendTo { get; set; }
        public virtual string ExecuteMethod {get;set;}
        public virtual bool Equals(object obj)
        {
            return Equals(this, (RAETask) obj);
        }

        protected virtual bool Equals(RAETask x ,RAETask y)
        {
            return x.ID == y.ID;
        }
    }
"Mitarbeiter anlegen". Wenn die Benutzergruppe sich nun im Programm einloggt , sollen die Aufgaben bearbeitet werden.
Der Benutzer gibt die benötigten Felder ein, schickt den Task an den Server. Dieser führt die hinterlegten Aufgaben aus (zB AddUser im Feld ExecuteMethod) und schreibt die Daten ins Active Directory.

Auf dem Server gibt es mehrere Module (AddUserToAD , AddEmailInBox) usw.

Jetzt kommt der Knackpunkt : Wie kann ich dem UserClient gescheit eine Art Datenmaske übergeben, sodass der Ausgewählte Methode wie zB AddUser die richtigen Parameter inkl. Validierung kriegt.

Ich dachte daran, eine XAML View zu Serialisieren. Da ich aber mit MVVM Arbeite, müsste ich das ViewModel und den View Serialiseren.
Erscheint für mich nicht sehr elegant.

Hat jmd eine Idee ?

Thema: fluentNHibernate Mapping auslagern.
Am im Forum: Rund um die Programmierung

Hi JuyJuka,

ich denke fast, dass mir Variante 3 am meißten zusagt.

Grüße

Thema: fluentNHibernate Mapping auslagern.
Am im Forum: Rund um die Programmierung

Hallo zusammen,
auch wenn es sich um fluentNHibernate handelt, dachte ich passt dieses Thema besser in diese Rubrik.

Folgendes ist gegeben : Ein Interface ISessioNFactorManager welcher mir eine ISession von NHibernate zurückgibt. In der konkreten implementation wird per fluentnHibernate die Datenbank konfiguriert und das Mapping gemacht.

Problem : Wie gebe ich Mappingklassen in diesen FactoryManager ? Ich will ja nicht, dass der FactoryManager einen Verweis auf die Models hat.

Hat jmd eine Idee wie ich das Lösen könnte ?

Grüße

Thema: Projekte/Struktur und Namespace wie macht Ihr es ?
Am im Forum: Rund um die Programmierung

Hallo zusammen,

ich habe eine generelle Frage zum Aufbau zu Projekten und deren Namespaces.

Ich mache es immer so :
Projektname.Interface (IRepository und andere Interfaces)
Projektname.Model (Alle Datenmodelle)
Projektname.App (Die eigtl. Applikation)
Projekname.Common (Implementierungen der Interfaces)

Nun habe ich einfach spaßeshalber mir zwei Projekte aus Codeplex gegriffen:
http://rocketframework.codeplex.com/SourceControl/changeset/view/9734
http://efmvc.codeplex.com/SourceControl/changeset/view/77422

Beide Projekte verfolgen einen anderen Ansatz, wobei mir der Ansatz aus dem Rockeframework besser gefällt.

Wie strukturiert Ihr eure Applikationen ? Gibt es eurer Ansicht nach Vor - Nachteile bei eurer Vorgehensweise ?

Auf euer Feedback bin ich gespannt :)

Grüße

Thema: LINQ / DataContext / Problem beim Speichern
Am im Forum: Datentechnologien

Hi, im Grunde hast du Recht , man kann aber auch den Weg gehen , das Generische Repository zu nutzen und für gewisse Entitäten Filter zu bauen.
zB GetUserByName und diese als ExtensionMethod anbieten.
Dann habe ich auch nur eine Stelle wo ich den Code warten muss.

Wobei der Aufwand dann auch gleich ist entweder ein spezifiziertes Repository oder der Filter .... ;-)

Und ja : Wartung wird oft vernachlässigt, vorallem wenn man CodeSchnipsel postet ohne das große Ganze zu sehen .

Thema: LINQ / DataContext / Problem beim Speichern
Am im Forum: Datentechnologien

Zitat von Abt
Zitat von Ahrimaan
wieso nicht ein vollkommen Generisches Repo ?
Weil Du hier keine Modularisierung im eigentlichen Sinne erstellen kannst.
In spezifischen Repositories kannst Du Methoden implementieren, die nur für dieses eine Entity gelten.
==> Vorteil Modularisierung
==> Vorteil Code-Wartung

Siehe auch mein Beispiel in Repository in EF 4.1 korrekt einsetzen

Hmm wenn ich aber eine Modularisierung brauche bzw. eine Spezialisierung kann ich ein Repository erstellen, welches von dem generischem ableitet oder ?

Ich meine viele Wege führen nach Rom und solange man sich an gewisse Praktiken hält...... Oder sehe ich das zu Naiv ?

Grüße

Thema: LINQ / DataContext / Problem beim Speichern
Am im Forum: Datentechnologien

Hi,
etwas OffTopic:
wieso nicht ein vollkommen Generisches Repo ?

public interface IRepository<T> : IQueryable<T>
    {
        bool Save(T entity);
        T Get(int id);
        void Remove(T entity);
    } 

 public class GenericRepository<T> : IRepository<T>
    {
        private readonly ISession _session;

        public GenericRepository(ISession session)
        {
            _session = session;
        }

        public IEnumerator<T> GetEnumerator()
        {
            return _session.Query<T>().GetEnumerator();
        }

        IEnumerator IEnumerable.GetEnumerator()
        {
            return GetEnumerator();
        }

        public Expression Expression
        {
            get { return _session.Query<T>().Expression; }
        }

        public Type ElementType
        {
            get { return _session.Query<T>().ElementType; }
        }

        public IQueryProvider Provider
        {
            get { return _session.Query<T>().Provider; }
        }


        public bool Save(T entity)
        {
            try
            {
                using (var transact = _session.BeginTransaction())
                {
                    _session.SaveOrUpdate(entity);
                    transact.Commit();
                    return true;
                }
            }
            catch (Exception)
            {

                return false;
            }
        }

        public T Get(int id)
        {
            return _session.Get<T>(id);
        }

        public void Remove(T entity)
        {
            using (var transact = _session.BeginTransaction())
            {
                _session.Delete(entity);
                transact.Commit();
            }
        }
    }

Ich finde die Art von Repository recht genial : Man muss keine Ableitungen schreiben sondern erstellt sich im Code, je nach gewünschten Typ ein Repo. Ich mus also nicht zwingend ein UserRepository , ein AdressRepository ein CusterRepo usw. schreiben sondern rufe mir nur das GenericRepository auf.

Grüße

Thema: Private Properties vs. Private Fields
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hi Lynix,

was ist aber mit Properties , die bewusst eine Multiplikation machen ?
Oder Rabatte etc. ?

Ich habe einen Property Summe , welche mir zurückgibt _anzahl * _wert.
Das wäre deiner Meinung nach nicht legitim ?

Grüße

Thema: EntityFramework: Datenbank in der App.config wechseln
Am im Forum: Datentechnologien

Hi Pilipu,

um mal einen anderen Weg der Beeinflussung einzuschlagen:
Schau dir mal den Entity Framework Connection Builder an
Damit solltest du realtiv leicht, zwischen DBs usw. wechseln können.
Die jeweiligen Konfigurations Propertys kannst du dann ja in der App.Config speichern

http://msdn.microsoft.com/de-de/library/bb738533.aspx

Grüße

Thema: Repository Klasse korrekt ? FluentNHibernate optimale abfragen erstellen
Am im Forum: Datentechnologien

Ola,

ich würde mir die Session zurückgeben lassen :

public static class Database
{
private static ISessionFactory _sessionFactory;
private static void CreateSessionFactory()
{
_sessionFactory =
Fluently.Configure()
.Database(FluentNHibernate.Cfg.Db.MsSqlConfiguration.MsSql2005.ConnectionString(""))
.ProxyFactoryFactory(typeof(NHibernate.ByteCode.Castle.ProxyFactory))
.Mappings(m =>
m.AutoMappings
.Add(AutoMap.AssemblyOf<LogEntity>)
)
.ExposeConfiguration(BuildSchema)
.BuildSessionFactory();
}
private static void BuildSchema(Configuration cfg)
{
new SchemaExport(cfg).Create(false,true);
}
private static ISessionFactory SessionFactory
{
get
{
if (_sessionFactory == null)
CreateSessionFactory();
return _sessionFactory;
}
}
public static ISession OpenSession()
{
return SessionFactory.OpenSession();
}
}

Thema: Repository Klasse korrekt ? FluentNHibernate optimale abfragen erstellen
Am im Forum: Datentechnologien

Hi,
wir arbeiten nur mit ISession und übergeben diese aus dem Datacontext.
Die ISessionFactory ist in einer anderen Schicht anzusiedeln.

Grüße

Thema: FileSystemWatcher : Änderungen an Ordnerrechten überwachen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hi,

super danke !

Thema: FileSystemWatcher : Änderungen an Ordnerrechten überwachen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo zusammen,

ist es möglich den FileSystemWatcher zu überreden Ordner zu überwachen und wenn sich Rechte am Ordner Ändern ein Event zu schmeißen ?
Ich fürchte, da es ein FILE Watcher ist , muss ich so etwas selber implementieren korrekt ?

Grüße