Laden...
K
Benutzerbeschreibung
Konto auf Wunsch des Benutzers gesperrt

Forenbeiträge von kat_2403 Ingesamt 236 Beiträge

19.11.2013 - 09:51 Uhr

Hallo zusammen,

es wurde schon mehrfach Lösungen gepostet, aber ich kriege es trotzdem nicht hin, oder ich verstehe grundsätzlich etwas falsch.

Ich möchte vom Explorer ausgewählte Dateien in ein Listview "droppen" ....

Das Problem ist, ich lauf gar nicht mal in den Ereignishandler rein.

Im Form_Load des Formulars, auf dem die listview liegt, abonniere ich die Ereignisse:


listView1.AllowDrop = true;
listView1.DragDrop += new DragEventHandler(listView1_DragDrop);
listView1.DragEnter += new DragEventHandler(listView1_DragEnter);

In den Handlern:


        private void listView1_DragEnter(object sender, DragEventArgs e)
        {
            //Prüft ob es sich bei den gezogenen Daten um Dateien handelt
            //Wenn ja, setzen wir den Drag&Drop-Typ auf "Alle"
            //Ansonsten setzen wir den Drag&Drop-Typ auf "nichts"

            e.Effect = ((e.Data.GetDataPresent(DataFormats.FileDrop)) ? DragDropEffects.All : DragDropEffects.None);
        }


private void listView1_DragDrop(object sender, DragEventArgs e)
        {
            //Akzeptiert die Daten und verarbeitet sie  

            if (e.Data.GetDataPresent(DataFormats.FileDrop))
            {
                //Bei den gezogenen Daten kann es sich durchaus um mehrere Dateien handeln 
                //Wir konvertieren die Daten in ein String-Array, welches den vollständigen Dateipfad aller Dateien enthält
                //Wir nehmen nur das 0te Element und weisen es dem Textfeld zu
                //e.Data.GetData(DataFormats.FileDrop);

                foreach (String pfad in(String[])e.Data.GetData(DataFormats.FileDrop))
                    listView1.Items.Add(System.IO.Path.GetFileName(pfad));
            }
            
        }

Jetzt mal abgesehen davon, was in den Handlern steht, er läuft da gar nicht mal rein. Was mache ich da falsch. Das Formular, auf dem die listview liegt ist ein Child einer MDI-Form.
Danke für jeden Tipp.

07.03.2013 - 12:45 Uhr

Eijeijeijeijei ....
Danke.

07.03.2013 - 12:39 Uhr

innerhalb des select-statements?

07.03.2013 - 12:29 Uhr

Hallo,

ich möchte eine Objektliste filtern:


            var filterdRechner = (from r in lstRechner
                                  where
                                      r.IpAdresse.Contains(searchText) ||
                                      r.MacAdresse.Contains(searchText) ||
                                      r.ModellNummer.Contains(searchText) ||
                                      r.ModellName.Contains(searchText) ||
                                      r.RechnerName.Contains(searchText) ||
                                      r.InventarNummer.Contains(searchText) ||
                                      r.Office.Bezeichnung.Contains(searchText)

                                  select r);

Office ist ein Objektverweis ... Das geht natürlich in die Hose, wenn dieser NULL ist. Das soll aber für das Objekt Rechner erlaubt sein. Gibt es da eine Lösung, wie ich trotzdem ein Result bekomme?
Danke.

12.02.2013 - 22:11 Uhr

Wenn ich das Binding so definiere, dann klappt es für den ersten Eintrag in der Liste, dass er den richtigen Eintrag in der Combobox vorauswählt:


artBindingSource.DataSource = verw.GetArt();
cboArt.DataSource = artBindingSource;
cboArt.ValueMember = "ArtId";
cboArt.DisplayMember = "Bezeichnung";
cboArt.DataBindings.Add("Text", selectedItem.Art, cboArt.DisplayMember, true, DataSourceUpdateMode.OnPropertyChanged);

Dann hatte ich im lbRechner_SelectedIndexChanged Ereignis der Liste einefügt:


selectedItem = (lbRechner.SelectedItem as Rechner);
cboArt.SelectedItem = selectedItem.Art;

Da holt er sich zwar den korrekten Wert, kann ihn aber dem SelectedItem nicht wirklich zuweisen, bzw. in der Anzeige wird das nicht übernommen.

12.02.2013 - 21:46 Uhr

Google hin, google her .... bin ich über


cboArt.DataBindings.Add("SelectedValue", rechnerBindingSource, "Rechner.Art");

gestolpert, tut es aber auch nicht.

12.02.2013 - 21:04 Uhr

Guten Abend,
ich weiß, dieses Thema wurde hier schon mehrfach diskutiert, ich kriegs trotzdem nicht hin.

Ich habe eine Listbox auf meiner Form, die z.B. alle verfügbaren Rechner auflistet.


lbRechner.DataSource = rechnerBindingSource;
lbRechner.DisplayMember = "ipAdresse";
lbRechner.ValueMember = "rechnerId";

Abhängig vom ausgewählten Rechner sollen nun Detailwerte in Textboxen und Comboboxen ausgegeben werden.


tbIpAdresse.DataBindings.Add("Text", rechnerBindingSource, "IpAdresse", true, DataSourceUpdateMode.OnPropertyChanged);
tbRechnername.DataBindings.Add("Text", rechnerBindingSource, "RechnerName", true, DataSourceUpdateMode.OnPropertyChanged);
tbMacAdresse.DataBindings.Add("Text", rechnerBindingSource, "MacAdresse", true, DataSourceUpdateMode.OnPropertyChanged);

Mit Textboxen klappt das soweit ganz gut.
Jetzt habe ich auch eine Combobox z.B. drauf, wo die Art des Rechners angegeben wird (Laptop, Tower, virtuell ...
Diese Combo initialisiere ich mit ner anderen BindingSource.


artBindingSource.DataSource = verw.GetArt();
cboArt.DataSource = artBindingSource;
cboArt.ValueMember = "ArtId";
cboArt.DisplayMember = "Bezeichnung";

Soweit auch noch ok. Jetzt soll aber der Wert drin stehen, der zugewiesen wurde.
Ich meinte so würde das funktionieren:


cboArt.DataBindings.Add("Text", selectedItem, cboArt.DisplayMember, true, DataSourceUpdateMode.OnPropertyChanged);

Tut es aber nicht.
Im Ereignishandler der Listbox weise ich die Werte zu:


private void lbRechner_SelectedIndexChanged(object sender, EventArgs e)
        {
            selectedItem = (lbRechner.SelectedItem as Rechner);
            
        }

Wo klemmts bei mir denn wieder?
Danke.

07.02.2013 - 13:32 Uhr

Danke.
Ich belass es bei meinem Mini-UserControl. Das ist erstmal übersichtlicher, als mir so ein "Monster" reinzuziehen.
Ich hatte es ja schon erstellt.

--- Mir ging es darum, wie ich es in ein anderes einbinde.
Geht so:


<PTS_Verwaltung:BetriebssystemSelectionView Margin="5" Grid.Row="11" Grid.Column="2" >
                
</PTS_Verwaltung:BetriebssystemSelectionView>

Des wars auch schon.
LG

07.02.2013 - 12:46 Uhr

sieht das so aus:
ich möchte eine "Rechnerverwaltung" erstellen ...


<UserControl x:Class="PTS_Verwaltung.Views.RechnerDisplay"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:vm="clr-namespace:PTS_Verwaltung.ViewModels">
    <UserControl.DataContext>
        <vm:RechnerDisplayModel />
    </UserControl.DataContext>
    <Grid Height="482" Width="400">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"></RowDefinition>
            <RowDefinition Height="*"></RowDefinition>
        </Grid.RowDefinitions>

        <StackPanel  HorizontalAlignment="Right" Orientation="Horizontal" Margin="5,2,10,10">
            <Button Command="{Binding GetRechnerCommand}" Margin="2,5,0,0"  Padding="5" Height="35" Width="70" 
                  >DB Refresh
                <Button.Background>
                    <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                        <GradientStop Color="Black" Offset="0" />
                        <GradientStop Color="White" Offset="1" />
                    </LinearGradientBrush>
                </Button.Background>
            </Button>
            <Button Margin="2,5,0,0"  Padding="2" Height="35" Width="50"
                  Command="{Binding ClearCommand}">Clear
                <Button.Background>
                    <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                        <GradientStop Color="Black" Offset="0" />
                        <GradientStop Color="White" Offset="1" />
                    </LinearGradientBrush>
                </Button.Background>
            </Button>
            <Button Margin="2,5,0,0"  Padding="2" Height="35" Width="50"
                  Command="{Binding UpdateCommand}" Foreground="Black">Update
                <Button.Background>
                    <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                        <GradientStop Color="Black" Offset="0" />
                        <GradientStop Color="White" Offset="1" />
                    </LinearGradientBrush>
                </Button.Background>
            </Button>
            <Button Margin="2,5,0,0"  Padding="2" Height="35" Width="50"
                  Command="{Binding DeleteCommand}" Foreground="Black">Delete
                <Button.Background>
                    <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                        <GradientStop Color="Black" Offset="0" />
                        <GradientStop Color="White" Offset="1" />
                    </LinearGradientBrush>
                </Button.Background>
            </Button>
            <Button Margin="2,5,0,0" Height="35" Width="50"
                  Command="{Binding AddCommand}" Padding="2">Add
                <Button.Background>
                    <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                        <GradientStop Color="Black" Offset="0" />
                        <GradientStop Color="White" Offset="1" />
                    </LinearGradientBrush>
                </Button.Background>
            </Button>
        </StackPanel>
        <Grid Margin="10" Grid.Row="1">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto"></ColumnDefinition>
                <ColumnDefinition></ColumnDefinition>
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"></RowDefinition>
                <RowDefinition Height="Auto"></RowDefinition>
                <RowDefinition Height="Auto"></RowDefinition>
                <RowDefinition Height="Auto"></RowDefinition>
                <RowDefinition Height="Auto"></RowDefinition>
                <RowDefinition Height="Auto"></RowDefinition>
                <RowDefinition Height="Auto"></RowDefinition>
                <RowDefinition Height="Auto"></RowDefinition>
                <!--<RowDefinition Height="*"></RowDefinition>-->
                <RowDefinition Height="Auto"></RowDefinition>
                <RowDefinition Height="Auto"></RowDefinition>
                <RowDefinition Height="Auto"></RowDefinition>
                <RowDefinition Height="Auto"></RowDefinition>
                <RowDefinition Height="Auto"></RowDefinition>
                <RowDefinition Height="Auto"></RowDefinition>
                <RowDefinition Height="58*" />
            </Grid.RowDefinitions>
            <TextBlock Margin="7">Rechnername:</TextBlock>
            <TextBox Margin="5" Grid.Column="1" BorderBrush="{Binding Path=Stat.ModellNameBrush}" BorderThickness="1"
                     Text="{Binding Path=DisplayedRechner.RechnerName, UpdateSourceTrigger=PropertyChanged}"></TextBox>
            <TextBlock Margin="7" Grid.Row="1">Modellname:</TextBlock>
            <TextBox Margin="5" Grid.Row="1" Grid.Column="1" BorderBrush="{Binding Path=Stat.ModellNameBrush}" BorderThickness="1"
                     Text="{Binding Path=DisplayedRechner.ModellName, UpdateSourceTrigger=PropertyChanged}"></TextBox>
            <TextBlock Margin="7" Grid.Row="2">Modellnummer:</TextBlock>
            <TextBox Margin="5" Grid.Row="2" Grid.Column="1" BorderBrush="{Binding Path=Stat.ModellNummerBrush}" BorderThickness="1"
                    Text="{Binding Path=DisplayedRechner.ModellNummer, UpdateSourceTrigger=PropertyChanged}">
            </TextBox>
            <TextBlock Margin="7" Grid.Row="3">IP-Adresse:</TextBlock>
            <TextBox Margin="5" Grid.Row="3" Grid.Column="1" BorderBrush="{Binding Path=Stat.ModellNummerBrush}" BorderThickness="1"
                    Text="{Binding Path=DisplayedRechner.IpAdresse, UpdateSourceTrigger=PropertyChanged}">
            </TextBox>
            <TextBlock Margin="7" Grid.Row="4">MAC-Adresse:</TextBlock>
            <TextBox Margin="5" Grid.Row="4" Grid.Column="1" BorderBrush="{Binding Path=Stat.ModellNummerBrush}" BorderThickness="1"
                    Text="{Binding Path=DisplayedRechner.MacAdresse, UpdateSourceTrigger=PropertyChanged}">
            </TextBox>
            <TextBlock Margin="7" Grid.Row="5">Betriebssystem:</TextBlock>
            <TextBox Margin="5" Grid.Row="5" Grid.Column="1" BorderBrush="{Binding Path=Stat.ModellNummerBrush}" BorderThickness="1"
                    Text="{Binding Path=DisplayedRechner.OsName, UpdateSourceTrigger=PropertyChanged}">
            </TextBox>
            <TextBlock Margin="7" Grid.Row="6">RAM:</TextBlock>
            <TextBox Margin="5" Grid.Row="6" Grid.Column="1" BorderBrush="{Binding Path=Stat.ModellNummerBrush}" BorderThickness="1"
                    Text="{Binding Path=DisplayedRechner.Ram, UpdateSourceTrigger=PropertyChanged}">
            </TextBox>
            <TextBlock Margin="7" Grid.Row="7">Leistung:</TextBlock>
            <TextBox Margin="5" Grid.Row="7" Grid.Column="1" BorderBrush="{Binding Path=Stat.ModellNummerBrush}" BorderThickness="1"
                    Text="{Binding Path=DisplayedRechner.Leistung, UpdateSourceTrigger=PropertyChanged}">
            </TextBox>
            <TextBlock Margin="7" Grid.Row="8">Kaufpreis:</TextBlock>
            <TextBox Margin="5" Grid.Row="8" Grid.Column="1" BorderBrush="{Binding Path=Stat.ModellNummerBrush}" BorderThickness="1"
                    Text="{Binding Path=DisplayedRechner.KaufPreis, UpdateSourceTrigger=PropertyChanged}">
            </TextBox>
            <TextBlock Margin="7" Grid.Row="9">Kaufdatum:</TextBlock>
            <TextBox Margin="5" Grid.Row="9" Grid.Column="1" BorderBrush="{Binding Path=Stat.ModellNummerBrush}" BorderThickness="1"
                    Text="{Binding Path=DisplayedRechner.KaufDatum, UpdateSourceTrigger=PropertyChanged}">
            </TextBox>
            <TextBlock Margin="7" Grid.Row="10">Art:</TextBlock>
            <TextBox Margin="5" Grid.Row="10" Grid.Column="1" BorderBrush="{Binding Path=Stat.ModellNummerBrush}" BorderThickness="1"
                    Text="{Binding Path=DisplayedRechner.ArtName, UpdateSourceTrigger=PropertyChanged}">
            </TextBox>
            <TextBlock Margin="7" Grid.Row="11">Test:</TextBlock>
            <UserControl Margin="5" Grid.Row="11" Grid.Column="2" >

              
            </UserControl>
            <TextBlock Margin="7,25,15,0" Grid.Row="12">Status:</TextBlock>
            <TextBox Margin="7,0,5,34" Grid.Row="13" Text="{Binding Path=Stat.Status}" Grid.ColumnSpan="2"></TextBox>
        </Grid>
    </Grid>
</UserControl>

An die Stelle von TEST soll eine Combobox eingefügt werden, die alle verfügbaren Betriebssysteme auflistet. Das UserControl habe ich auch erstellt:


<UserControl x:Class="PTS_Verwaltung.Views.BetriebssystemSelectionView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:vw="clr-namespace:PTS_Verwaltung.Views"        
    xmlns:vm="clr-namespace:PTS_Verwaltung.ViewModels"
    xmlns:foundation="clr-namespace:PTS_Verwaltung.Foundation" mc:Ignorable="d" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" d:DesignWidth="132">

    <UserControl.DataContext>
        <vm:BetriebssystemSelectionModel />
    </UserControl.DataContext>

    <Grid>
        <ComboBox ItemsSource="{Binding DataItems}"
                  DisplayMemberPath="RechnerName"
                  SelectedItem="{Binding SelectedBetriebssystem}"
                  foundation:CommandBehavior.RoutedEventName="SelectionChanged"
                  foundation:CommandBehavior.TheCommandToRun="{Binding Path=ComboBoxCommand}">
        </ComboBox>
    </Grid>
</UserControl>

Funktioniert das auch so, dass ich dann auch den richtigen zugewiesenen Wert für das angezeigte Rechnerelement habe?
LG

07.02.2013 - 12:26 Uhr

Hallo,

kann ich ein UserControl in ein anderes einbinden?
LG

15.10.2012 - 10:19 Uhr

Okay, danke dir, werd ich mir nochmal anschauen, und versuchen zu verinnerlichen.
Danke.

15.10.2012 - 09:51 Uhr

Anbei noch ein Screenshot der gesamten Projektmappe.

15.10.2012 - 09:50 Uhr

Hmmm, ich bin natürlich dankbar für jeden Tipp ... ich würde dir gern mal meine Architektur vorstellen, weiß aber nicht, ob das den Rahmen hier sprengt ..
Vielleicht seh ich dann, was du meinst, oder Verständnisprobleme meinersetz klären sich.

Mein Projekt besteht aus 7 Einzelprojekten.
1 - ASServiceHost
2 - ASServiceContracts
3 - ASServiceLibrary

-- diese 3 stellen meine WCF Funktionalitäten dar

4 - ASLibrary - DB/Entity Framwork Klassen

5 - ASBusinessManager
-- Zugriff auf die Entitäten
-- Beispiel


namespace ASBusinessManagers
{
    public class StoryManager
    {
        private ASEntities context;

        public StoryManager()
        {
            context=new ASEntities();
        }

        public List<ApplicationStory> GetStories()
        {
            List<ApplicationStory> stories = (from s in context.ApplicationStory select s).ToList();
            return stories;
        }
        /// <summary>
        /// Finds the story list - look in each field of the context.
        /// </summary>
        /// <param name="searchText">The search text.</param>
        /// <returns>list of stories</returns>
        public List<ApplicationStory> FindStoryList(string searchText)
        {

            List<ApplicationStory> stories = (from c in context.ApplicationStory.Where(
                s => s.Bezeichnung.Contains(searchText) ||
                    s.Verarbeitung.Contains(searchText) ||
                    s.IndCodes.Abk.Contains(searchText) ||
                    s.ApplicationStoryAnforderung.Any(a => a.Anforderung.Contains(searchText)) ||
                    s.ApplicationStoryArtikel.Any(a => a.ArtikelNr.Contains(searchText) || a.Beschreibung.Contains(searchText)) ||
                    s.ApplicatonStoryDokument.Any(d => d.DokumentName.Contains(searchText)))
                    select c).ToList();

            return stories;
            
        }

        public ApplicationStory FindStory(Guid storyID)
        {
            var q = from c in context.ApplicationStory //.Include("Orders")
                    where c.Id == storyID
                    select c;
            var story = q.First();
            return story;
        }

        public void UpdateStory(ApplicationStory story)
        {
            context.Attach(story);
            //context.ObjectStateManager.GetObjectStateEntry(customer.EntityKey).SetModified();
            story.SetAllModified(context); // custom extension method

            try
            {
                context.SaveChanges();
            }
            catch (OptimisticConcurrencyException e)
            {
                //context.Refresh(RefreshMode.ClientWins, story); // Last in wins
                //context.SaveChanges();
                throw (e);
            }
        }

        public void AddStory(ApplicationStory story)
        {
            context.AddToApplicationStory(story);
            context.SaveChanges();
        }

        public void DeleteStory(ApplicationStory story)
        {
            context.Attach(story);
            context.DeleteObject(story);
            context.SaveChanges();
        }
    }
}

Dann meine Presenterschicht:
Im Projekt
6 - ASPresentation
bestehend aus:
ViewInterfaces, PresenterInterfaces und Presenters
siehe Screenshot

Ja und letztendlich halt die GUI
Evt. hab ich den Aufbau okay, aber implementiere unnötige Sache in der GUI. Hmmm..

15.10.2012 - 09:15 Uhr

Hallo Schildkroete,
das ist völlig richtig. Die Beziehungen sind auch korrekt geladen, ich habe das dazugehörige Kontakt-Objekt im ApplicationStory Objekt. Wenn ich einfach nur die Infos zum Kontakt in einer Textbox oder in einem Label darstellen möchte, funktioniert das auch.
Ich möchte allerdings ALLE Kontakte in die Combobox laden, und eben das zugewiesene vorselektieren.

Du musst es in der ComboBox auch alles richtig binden.

  
Genau, das ist die Kunst, die ich nicht beherrsche.   
Ich meine schon, dass ich mein Miniprojekt schulbuchtechnisch mit dem MVVM Pattern umgesetzt habe. Gerade weil ich Newbie bin und es verstehen möchte, aber eben schon bei diesem minimalen Punkt komm ich leider nicht weiter.  
  
LG
12.10.2012 - 11:09 Uhr

Erst einmal vielen Dank für deine Antwort.
Da ich Newbie auf diesem Gebiet bin, habe ich mich an eben ein Tutorial gehalten The Entity Framework in Layered Architectures ... Ich empfand das als gut .... mit meinem Newbie-Wissen halt. Deshalb hab ich das wirklich versucht, 1:1 so einmal umzusetzen.
Ich werd dann wohl eher nochmal mit dem MVVM beginnen und die Anwendung neu erstellen. Ist ja nur ein Test, ich möchte es aber verstehen. Danke dir.
LG

12.10.2012 - 09:56 Uhr

Guten Morgen,

ich erstelle eine WPF Anwendung, die mir die Daten - via EF - zur bereitstellt. Ich habe das Problem, dass ich es nicht hinbekomme, in meiner Detailansicht eine 1:n Beziehung in einer Combobox darzustellen.
Ich habe ein Objekt "ApplicationStory" (Anwendungsfall), das diverse Daten abbildet, u.a. Kontakdaten, wer diesen Fall erzeugt hat. Also
ApplicationStory: Katja's Story
Ansprechpartner: KM

Ich lade mir alle möglichen Ansprechpartner in die Combobox, der Eintrag KM - der als Id Referenz im Objekt ApplicationStory gespeichert ist, soll vorselektiert sein.

Hm.

Der Code der StoryView.xaml.cs sieht folgendermaßen aus:


public partial class StoryView : Window, IStoryView
    {
        #region Fields

        private IStoryPresenter presenter;
        private ApplicationStory story;
        private IList<object> storyArtikelInfo;
        private IList<object> kontakte;
        private ViewMode mode;

        #endregion

        #region Konstruktor
        public StoryView(ApplicationStory story)
        {
            InitializeComponent();
            this.story = story; // set this so we can get the ID and load it in PrepareView
            presenter = new StoryPresenter(this);
            //CollectionViewSource kontakteSource = (FindResource("KontakteLookup") as CollectionViewSource);
            //kontakteSource.Source = kontakte;
        }
        #endregion

        #region Events

        private void storyView_Loaded(object sender, RoutedEventArgs e)
        {
            if (PrepareView != null) PrepareView();
        }

        private void btnSaveStory_Click(object sender, RoutedEventArgs e)
        {
            if (SaveStory != null) SaveStory();
            this.Close();
        }

        private void btnDeleteStory_Click(object sender, RoutedEventArgs e)
        {
            if (DeleteStory != null) DeleteStory();
            this.Close();
        }

        private void btnCancelStory_Click(object sender, RoutedEventArgs e)
        {
            if (CancelChanges != null) CancelChanges();
            this.Close();
        }

        #endregion

        public ApplicationStory CurrentStory
        {
            get { return story; }
            set
            {
                story = value;
                DataContext = story;
            }
        }

        public IList<object> KontakteList
        {
            set
            {
                kontakte = value;
                cboKontakte.DataContext = kontakte; 
            }
        }

        public IList<object> ArtikelList
        {
            set { throw new NotImplementedException(); }
        }

        public event VoidEventHandler SaveStory;

        public event VoidEventHandler DeleteStory;

        public event VoidEventHandler CancelChanges;

        public event VoidEventHandler AddArtikel;

        public event VoidEventHandler EditArtikel;

        public event VoidEventHandler EditKontakt;

        public ViewMode Mode
        {
            get { return mode; }
            set { mode = value; }
        }

        public void SetModeDependentSettings()
        {
            // Check if we are in Add Mode or Edit mode and act appropriately
            switch (mode)
            {
                case ViewMode.EditMode:
                    btnDeleteStory.IsEnabled = true;
                    txtBezeichnung.Focus();
                    break;
                case ViewMode.AddMode:
                    btnDeleteStory.IsEnabled = false;
                    txtBezeichnung.Focus();
                    break;
                default:
                    break;
            }
        }

        public event VoidEventHandler PrepareView;
    }

KontakteList stellt hier die Daten zur Verfügung - alle möglichen Kontakte (Ansprechpartner).

Die XAML Datei ansich:


<Window x:Class="ASUIWpf.StoryView"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="StoryView" Height="392" Width="716"
        WindowStartupLocation="CenterScreen"
        x:Name="storyView"
        Loaded="storyView_Loaded"  IsEnabled="True" Opacity="1" Visibility="Visible">
    <Window.Resources>
        <!--<CollectionViewSource x:Key="KontakteLookup"/>-->
        <CollectionViewSource x:Key="IndCodeLookup"/>    
    </Window.Resources>
    <StackPanel Height="356" Name="LayoutRoot" Width="697">
        <TextBlock FontWeight="Bold" Height="24" Name="lblStoryDetails" Padding="5,3,0,0" Text="Application Story Details" TextWrapping="Wrap" Width="Auto"><TextBlock.Background><LinearGradientBrush EndPoint="0.474,0.123" StartPoint="0.474,0.954"><GradientStop Color="#FFCBCBCB" Offset="0" /><GradientStop Color="#FFFFFFFF" Offset="1" /></LinearGradientBrush></TextBlock.Background>
        </TextBlock>
        <StackPanel Height="2" Orientation="Horizontal" Width="Auto"></StackPanel>
        <StackPanel Height="67" Width="697">
            <TextBlock Height="Auto" Name="lblBezeichnung" Text="Bezeichnung" TextWrapping="Wrap" Width="Auto" />
            <TextBox Height="Auto" Name="txtBezeichnung" Text="{Binding Path=Bezeichnung}" TextWrapping="Wrap" Width="Auto" />
            <TextBlock Height="Auto" Name="lblVerarbeitung" Text="Verarbeitung" TextWrapping="Wrap" Width="Auto" />
            <TextBox Height="Auto" Name="txtVerarbeitung" Text="{Binding Path=Verarbeitung}" TextWrapping="Wrap" Width="Auto" />
        </StackPanel>
        <StackPanel Height="2" Orientation="Horizontal" Width="Auto"></StackPanel>
        <StackPanel Grid.Column="0" Orientation="Horizontal">
            <Label Content="Ansprechpartner" />
            
        </StackPanel>
        <StackPanel Grid.Column="0" Orientation="Horizontal">
            <ComboBox Height="23" Name="cboKontakte" Width="120" 
                        IsEditable="False" 
                        ItemsSource="{Binding}" 
                        SelectedValuePath="Id"
                        DisplayMemberPath="Bezeichnung"
                        SelectedValue="{Binding Path=IdKontakt}" 
                        />
         </StackPanel>
        <WrapPanel Height="38" Width="268">
            <Button Click="btnSaveStory_Click" Content="Speichern" Height="25" Margin="4,4,4,4" Name="btnSaveStory" Width="80" />
            <Button Click="btnDeleteStory_Click" Content="Löschen" Height="25" Margin="4,4,4,4" Name="btnDeleteStory" Width="80" />
            <Button Click="btnCancelStory_Click" Content="Cancel" Height="25" Margin="4,4,4,4" Name="btnCancelStory" Width="80" />
        </WrapPanel>
    </StackPanel>
</Window>

Relevant hier: cboKontakte
Jetzt lädt er mir zwar alle möglichen Kontakte in die Liste, allerdings selektiert er nicht, was im Objekt ApplicationStory eingetragen ist. Was mache ich da falsch.
Danke für jeden Tipp.
Anbei noch ein Screenshot.

12.09.2012 - 10:50 Uhr

Aha, okay, wieder was gelernt.
Und wie könnte man das "umgehen", bzw. die Eigenschaften z.B. readonly trotzdem bereitstellen. Ich möchte per WPF Binding ja die Daten an meine Form einfach binden.
LG

[EDIT]
Kann man meine ich so lösen:
Mehrfachbindungen und Converter-Klassen
Danke.

12.09.2012 - 09:54 Uhr

verwendetes Datenbanksystem: <MSSQL 2008> .NET4.0
Hallo,
ich habe mir mein Entity DataModel generieren lassen, dann Klassen erweitert, z.B. ganz simpel:


    public partial class Kontakt
    {
        public string FullName { get { return this.Vorname + " " + this.Nachname; } }

        public override string ToString()
        {
            return "Kontakt: " + this.FullName + "(" + this.Bezeichnung + ")";
        }
    }

Über einen Dienstverweis greife ich auf die "Objekt"-Typen zu. Hier allerdings sind die Erweiterungen nicht implementiert? Das ist doch nicht okay so, oder.
Greife ich direkt auf meine Datenzugrifssschicht zu, dann habe ich die Erweiterung drin.
LG

10.09.2012 - 14:39 Uhr

Wenn ich den ConnString aus der app.config der Konsolenanwendung nehme, bekomme ich gleich den Fehler:> Fehlermeldung:

Die angegebene benannte Verbindung wurde entweder nicht in der Konfiguration gefunden, ist nicht für die Verwendung mit dem EntityClient-Anbieter gedacht oder ist ungültig.

Die scheint also dort rein zu gehören.
Wenn ich den Connstring dort definiere, klappt das auch.
ABER --- die WPF Anwendung läuft nicht.
Jetzt krieg ich allerdings wieder nen neuen Fehler, der sich in den config Settings wahrscheinlich beheben lässt. > Fehlermeldung:

Das maximale Nachrichtengrößenkontingent für eingehende Nachrichten (65536) wurde überschritten. Verwenden Sie die MaxReceivedMessageSize-Eigenschaft für das entsprechende Bindungselement, um das Kontingent zu erhöhen.

Den Wert hab ich jetzt mal auf 10MB erhöht (10485760) ... Jetzt kommt die Meldung ...> Fehlermeldung:

Der Formatierer hat beim Deserialisieren der Nachricht eine Ausnahme ausgelöst: Fehler beim Deserialisieren von Parameter
>
. Die InnerException-Nachricht war "Fehler beim Deserialisieren des Objekts "vom Typ System.Collections.Generic.List`1[[ASPresentation.ASServiceHost.ApplicationStory, ASPresentation, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]". Die maximale Länge für Zeichenfolgeninhalt (8192) wurde beim Lesen von XML-Daten überschritten. Dieses Kontingent kann durch Ändern der "MaxStringContentLength"-Eigenschaft des beim Erstellen des XML-Lesers verwendeten "XmlDictionaryReaderQuotas"-Objekts erhöht werden. Zeile 2, Position 31664.". Weitere Details finden Sie unter "InnerException".

Hab ich geändert auf Maximum: 2147483647
Okay, dann folgende Meldung:> Fehlermeldung:

Der Formatierer hat beim Deserialisieren der Nachricht eine Ausnahme ausgelöst: Fehler beim Deserialisieren von Parameter
>
. Die InnerException-Nachricht war "Fehler beim Deserialisieren des Objekts "vom Typ System.Collections.Generic.List`1[[ASPresentation.ASServiceHost.ApplicationStory, ASPresentation, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]". Die maximale Lesetiefe (32) wurde überschritten, da die gelesenen XML-Daten mehr Verschachtelungsstufen enthalten als das Kontingent zulässt. Dieses Kontingent kann durch Ändern der "MaxDepth"-Eigenschaft des beim Erstellen des XML-Lesers verwendeten "XmlDictionaryReaderQuotas"-Objekts erhöht werden. Zeile 4, Position 140405.". Weitere Details finden Sie unter "InnerException".

Okay, dann habe ich in der Config mehrere Werte auf Maximum gesetzt ....


          <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647"
              maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />

Uuuuuuuund .... es funktioniert ....
Ich danke euch ...

10.09.2012 - 13:20 Uhr

Okay, ich habe
1 Projekt Klassenbibliothek ASLibrary.dll -> hier ist das EF Datenmodell drin. Keine app.config.
2 Projekt ASServiceContracts.dll -> hier ist mein (WCF) Service Interface definiert -> hier gibt es die app.config mit dem ConnectionString


<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <connectionStrings>
    <add name="ASEntities" connectionString="metadata=res://*/ASModel.csdl|res://*/ASModel.ssdl|res://*/ASModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=PTSC-LAP-KATJA\SQLSERVER2008;initial catalog=MIS;integrated security=True;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>
</configuration>

3 Projekt ASServiceLibrary.dll -> Implementation der Service (ASService : IASService -> greift auf Methoden von Projekt 4 zu) keine app.config
4 Projekt ASBusinessManagers.dll -> Zugriff auf Daten Projekt 1, keine App.config
5 Projekt ServiceHost ASServiceHost als Konsolenanwendung
mit app.config für den Service


<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="true"/>
          <!--<serviceDebug includeExceptionDetailInFaults="True" />-->
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

6 Projekt ASPresentation.dll - mit Presenter Interfaces/ViewInterfaces/Presenters mit der app.config für den Service


<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="BasicHttpBinding_IASService" closeTimeout="00:01:00"
                    openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                    allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
                    maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
                    messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
                    useDefaultWebProxy="true">
                    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                        maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                    <security mode="None">
                        <transport clientCredentialType="None" proxyCredentialType="None"
                            realm="" />
                        <message clientCredentialType="UserName" algorithmSuite="Default" />
                    </security>
                </binding>
            </basicHttpBinding>
            <netNamedPipeBinding>
                <binding name="NetNamedPipeBinding_IASService" closeTimeout="00:01:00"
                    openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                    transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions"
                    hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="524288"
                    maxBufferSize="65536" maxConnections="10" maxReceivedMessageSize="65536">
                    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                        maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                    <security mode="Transport">
                        <transport protectionLevel="EncryptAndSign" />
                    </security>
                </binding>
            </netNamedPipeBinding>
        </bindings>
        <client>
            <endpoint address="http://localhost:8000/AS/AS" binding="basicHttpBinding"
                bindingConfiguration="BasicHttpBinding_IASService" contract="ASServiceHost.IASService"
                name="BasicHttpBinding_IASService" />
            <endpoint address="net.pipe://localhost/PipeAS" binding="netNamedPipeBinding"
                bindingConfiguration="NetNamedPipeBinding_IASService" contract="ASServiceHost.IASService"
                name="NetNamedPipeBinding_IASService">
                <identity>
                    <userPrincipalName value="PTSC-LAP-Katja\Katja" />
                </identity>
            </endpoint>
        </client>
    </system.serviceModel>
</configuration>

Ja und zu guter letzt meine WPF Anwendung, bis jetzt ohne app.config.

LG

[EDIT]

10.09.2012 - 12:47 Uhr

Okay, ich habe jetzt NUR in der Bibliothek, in der der Service definiert ist, die ConnectionString Werte gesetzt, bekomme nun den Fehler:> Fehlermeldung:

Der Server konnte die Anforderung aufgrund eines internen Fehler nicht verarbeiten. Wenn Sie weitere Informationen zum Fehler erhalten möchten, aktivieren Sie entweder IncludeExceptionDetailInFaults (entweder über das ServiceBehaviorAttribute oder das <serviceDebug>-Konfigurationsverhalten) für den Client, um die Ausnahmeinformationen zurück an den Server zu senden, oder aktivieren Sie die Ablaufverfolgung gemäß der Microsoft .NET Framework 3.0 SDK-Dokumentation, und prüfen Sie die Serverablaufverfolgungsprotokolle.

Nehme ich den Connectionstring aus der KonsolenTestApp bekomme ich den Fehler > Fehlermeldung:

"Die angegebene benannte Verbindung wurde entweder nicht in der Konfiguration gefunden, ist nicht für die Verwendung mit dem EntityClient-Anbieter gedacht oder ist ungültig."}

10.09.2012 - 10:17 Uhr

hm ... ändert leider nix am Verhalten ...

08.09.2012 - 10:14 Uhr

Hallo,
ja, die habe ich in der Klassenbibliothek definiert, wo ich das EF - Model drin habe. Okay, dann versuche ich das, und bau das einfach in den Service rein.
Allerdings verstehe ich dann noch nicht, dass es in einer TestkonsolenApp funktioniert, aber nicht in der WPF Anwendung.
LG

07.09.2012 - 13:14 Uhr

Hallo,

ich greife in meiner ASLibrary mit EF auf eine SQL Datenbank MS2008 zu.
Das funktioniert problemlos, in meiner TestApp (KonsolenApp).

Meine App.Conf


<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <connectionStrings>
    <add name="ASEntities" connectionString="metadata=res://*/ASModel.csdl|res://*/ASModel.ssdl|res://*/ASModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=PTSC-LAP-KATJA\SQLSERVER2008;initial catalog=MIS;integrated security=True;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>
</configuration>

Versuche ich über WCF die Daten abzurufen, bekomme ich die Fehlermeldung:> Fehlermeldung:

Die angegebene benannte Verbindung wurde entweder nicht in der Konfiguration gefunden, ist nicht für die Verwendung mit dem EntityClient-Anbieter gedacht oder ist ungültig.
Detail:

{Ein ExceptionDetail, vermutlich erstellt durch IncludeExceptionDetailInFaults=TRUE, mit dem Wert:
System.ArgumentException: Die angegebene benannte Verbindung wurde entweder nicht in der Konfiguration gefunden, ist nicht für die Verwendung mit dem EntityClient-Anbieter gedacht oder ist ungültig.
bei System.Data.EntityClient.EntityConnection.ChangeConnectionString(String newConnectionString)
bei System.Data.EntityClient.EntityConnection..ctor(String connectionString)
bei System.Data.Objects.ObjectContext.CreateEntityConnection(String connectionString)
bei System.Data.Objects.ObjectContext..ctor(String connectionString, String defaultContainerName)
bei ASLibrary.ASEntities..ctor() in C:\Projekte\DEV\AS\AS\ASModel.Designer.cs:Zeile 45.
bei ASBusinessManagers.StoryManager..ctor() in C:\Projekte\DEV\AS\ASBusinessManagers\StoryManager.cs:Zeile 17.
bei ASServiceLibrary.ASService.FindStoryList(String storyName) in C:\Projekte\DEV\AS\ASServiceLibrary\ASService.cs:Zeile 20.
bei SyncInvokeFindStoryList(Object , Object[] , Object[] )
bei System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs)
bei System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc)
bei System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc)
bei System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage41(MessageRpc& rpc)
bei System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4(MessageRpc& rpc)
bei System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc& rpc)
bei System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage3(MessageRpc& rpc)
bei System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2(MessageRpc& rpc)
bei System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11(MessageRpc& rpc)
bei System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1(MessageRpc& rpc)
bei System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)}

Die App.conf des ServiceHosts sieht so aus:


<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="True" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

Auch der Hinweis auf EF bringt nichts. Eine Idee?
LG

05.09.2012 - 15:18 Uhr

Okay ... jetzt habe ich das alles noch mal aktualisiert (Verweis + Konfiguration) ... warum auch immer, jetzt kennt er die Methoden und Objekte.
Ich danke dir, ohne deine Hilfe hätt ich das nicht hingekriegt.
Tausend Danke.
LG

05.09.2012 - 15:11 Uhr

Jo, der Dienstverweis ist ohne Fehler hinzugefügt worden. Trotzdem seh ich die Objekte/Methoden nicht. Komisch ist, dass er mir in den Projekt/Properties für jedes Objekt, also bei mir 2 ... Datenbankobjekte erzeugt. Das will ich ja nicht haben. letztendlich will ich auf meine SQL Daten via EF zugreifen, und in diesem Projekt hab ich das alles schon definiert.

[EDIT]
Letztendlich ist es ja mein Ziel, dass ich nur über den Dienst die Objekte/Methoden bereitstelle, also darauf verweise und nicht direkt an meine "Datenschicht".
LG

05.09.2012 - 14:47 Uhr

Okay, danke.
Das probier ich auch gleich aus.
Jetzt möchte ich noch, dass ich in dem Dienstverweis --- dort eben meine Methoden/und Datentypen zur Verfügung habe. Ich drück mich wahrscheinlich blöd aus. Aber, wenn ich im Objektkatalog auf den Dienstverweis gehen, sollen dort meine Methoden und Datentypen auch zur Verfügung stehen.
Okay
DAnke dir.
LG

05.09.2012 - 14:22 Uhr

😮 Ich danke danke danke dir für deine Hilfe.
Es läuft ...
Suppi.
LG

05.09.2012 - 13:55 Uhr

Okay ... jetzt sind wir schon ein Stückchen weiter.
Danke für deine Hilfe.

Möchte ich jetzt den Dienstverweis hinzufügen, bekomme ich diese Meldung.> Fehlermeldung:

Das HTML-Dokument enthält keine Webdienst-Suchinformationen.
Metadaten enthalten einen Verweis, der nicht aufgelöst werden kann: "http://localhost:8500/SH".
Der Inhaltstyp "application/soap+xml; charset=utf-8" wurde von Dienst "http://localhost:8500/SH" nicht unterstützt. Möglicherweise stimmen Client- und Dienstbindungen nicht überein.
Der Remoteserver hat einen Fehler zurückgegeben: (415) Cannot process the message because the content type 'application/soap+xml; charset=utf-8' was not the expected type 'text/xml; charset=utf-8'..
Wenn der Dienst in der aktuellen Projektmappe definiert ist, erstellen Sie die Projektmappe, und fügen Sie den Dienstverweis erneut hinzu.

[EDIT]
Mir scheinen die Metadaten zu fehlen.
... Dann werde ich das tun und gebe Rückmeldung 😃

05.09.2012 - 13:35 Uhr

Okay
1 Projekt (dll):
ServiceContracts


namespace ServiceContracts
{
    [ServiceContract]
    public interface IStringReverser
    {
        [OperationContract]
        string ReverseString(string value);
    }
}

1 Projekt (dll)
ServiceLibrary


namespace ServiceLibrary
{
    public class StringReverser : IStringReverser
    {
        public string ReverseString(string value)
        {
            char[] retVal = value.ToCharArray();
            int idx = 0;
            for(int i=value.Length -1;i>=0;i--)
           
                retVal[idx++] = value[i];
                return new string(retVal);
            
        }
    }
}

Host
Konsolenprogramm .. starte ich ...


ServiceHost host = new ServiceHost(typeof(StringReverser), new Uri("http://localhost:8500/SH"));
            host.Open();
            Console.WriteLine("Host running...Hit any key to shut-down.");
            Console.ReadKey();
            host.Close();

läuft ....
So bis dahin alles gut.
Neues Projekt hinzufügen, Projekt starten, wo Host ist ...
okay .... jetzt kann ich aber während der Host läuft keinen Dienstverweis hinzufügen, huh? Bin ich blind?
LG

05.09.2012 - 13:09 Uhr

Okay, danke vorerst.
Kriegs noch nicht hin, aber wurschtel mich da mal durch. Der Dienstkonfigurator sollte ja auch hilfreich sein.
LG

05.09.2012 - 12:57 Uhr

Okay, danke.
Den Servicename habe ich nachgetragen.
Hier wieder: In der Entwicklungsumgebung, wenn ich das Programm starte ... läuft es sauber.
Muss das Programm laufen, wenn ich den Dienstverweis hinzufügen möchte?
Weil so kriege ich wieder die gleiche Meldung:> Fehlermeldung:

Fehler beim Downloaden von 'http://localhost:8500/AS'.
Die Verbindung mit dem Remoteserver kann nicht hergestellt werden.
Es konnte keine Verbindung hergestellt werden, da der Zielcomputer die Verbindung verweigerte 127.0.0.1:8500
Metadaten enthalten einen Verweis, der nicht aufgelöst werden kann: "http://localhost:8500/AS".
Es war kein an
>
lauschender Endpunkt vorhanden, der die Nachricht annehmen konnte. Dies wird häufig durch eine fehlerhafte Adresse oder SOAP-Aktion verursacht. Weitere Details finden Sie unter "InnerException", sofern vorhanden.
Die Verbindung mit dem Remoteserver kann nicht hergestellt werden.
Es konnte keine Verbindung hergestellt werden, da der Zielcomputer die Verbindung verweigerte 127.0.0.1:8500
Wenn der Dienst in der aktuellen Projektmappe definiert ist, erstellen Sie die Projektmappe, und fügen Sie den Dienstverweis erneut hinzu.

Mir fehlen ja irgendwie noch die Metadaten ... oder?
LG

05.09.2012 - 12:06 Uhr

Hallo zusammen, ich arbeite mich gerade in WCF ein. Das Tutorial WCF Basics und WCF laufen derweil.
Jetzt möchte ich das so umbauen, dass ich mit einem Dienstverweis arbeite, aber das blick ich noch nicht und scheitere kläglich.

Ich habe es so verstanden, ich baue mir einen Host, den ich starte ...
ganz simple:


using (ServiceHost host = new ServiceHost(typeof(ASService), new Uri("http://localhost:8500"),
                new Uri("net.pipe://localhost")))
            {
                host.AddServiceEndpoint(typeof (IASService),
                                        new BasicHttpBinding(), "AS");
                host.AddServiceEndpoint(typeof(IASService),
                                        new NetNamedPipeBinding(), "PipeAS");
                host.Open();
                Console.WriteLine("Service is available. " +
                                  "Press <ENTER> to exit.");
                Console.ReadLine();
                host.Close();

            }

Der läuft wohl auch. Jedenfalls habe ich die Meldung, dass der Dienst verfügbar ist.
Jetzt wollte ich in meinem Client-Projekt einen Dienstverweis hinzufügen.
Das mache ich, indem ich obige Adresse eingebe: Http://localhost:8500.
Bekomme dann aber den Fehler:> Fehlermeldung:

Fehler beim Downloaden von 'http://localhost:8500'.
Die Verbindung mit dem Remoteserver kann nicht hergestellt werden.
Es konnte keine Verbindung hergestellt werden, da der Zielcomputer die Verbindung verweigerte 127.0.0.1:8500
Metadaten enthalten einen Verweis, der nicht aufgelöst werden kann: "http://localhost:8500/".
Es war kein an
>
lauschender Endpunkt vorhanden, der die Nachricht annehmen konnte. Dies wird häufig durch eine fehlerhafte Adresse oder SOAP-Aktion verursacht. Weitere Details finden Sie unter "InnerException", sofern vorhanden.
Die Verbindung mit dem Remoteserver kann nicht hergestellt werden.
Es konnte keine Verbindung hergestellt werden, da der Zielcomputer die Verbindung verweigerte 127.0.0.1:8500
Wenn der Dienst in der aktuellen Projektmappe definiert ist, erstellen Sie die Projektmappe, und fügen Sie den Dienstverweis erneut hinzu.

Starte ich die Host.exe allein (außerhalb der Entwicklungsumbebung VS2010, geht das leider komplett in die Hose.
Was hab ich hier nicht verstanden? Danke für jeden Tipp.

03.09.2012 - 15:11 Uhr

Ja, denk ich auch. Muss am Code dann irgendwo hängen. Danke für deine Hilfe.
Wenn ich nur eine Story habe, ohne eine Referenz in einer anderen Tabelle, dann kann ich via Code löschen. Naja ... ich geh das dann noch mal durch. Danke dir.

03.09.2012 - 15:00 Uhr

Das ist ja jetzt spannend.
Im Management Studio läuft die Abfrage


USE [MIS];
GO

DELETE FROM ApplicationStory
WHERE ID = '3c01a743-6646-48c1-9549-267fe6f4a6e5';

fehlerfrei durch. Datensatz gelöscht.

Hmm hmmm hmmm. 🤔

03.09.2012 - 14:44 Uhr

Hm ... bringt er leider immer noch den gleichen Fehler ...
Hab jetzt das CASCADING angepasst. Müsste ja so stimmen.


USE [MIS]
GO
/****** Object:  Table [dbo].[IndCodes]    Script Date: 09/03/2012 14:42:14 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[IndCodes](
	[Id] [uniqueidentifier] NOT NULL,
	[Abk] [nvarchar](10) NULL,
	[Bedeutung] [nvarchar](40) NULL,
	[Modified] [datetime] NOT NULL,
 CONSTRAINT [PK_IndCodes] PRIMARY KEY CLUSTERED 
(
	[Id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object:  Table [dbo].[Kontakt]    Script Date: 09/03/2012 14:42:14 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Kontakt](
	[Id] [uniqueidentifier] NOT NULL,
	[Vorname] [nvarchar](50) NULL,
	[Nachname] [nvarchar](50) NULL,
	[Bezeichnung] [nvarchar](10) NOT NULL,
	[Modified] [datetime] NOT NULL,
 CONSTRAINT [PK_Kontakt] PRIMARY KEY CLUSTERED 
(
	[Id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object:  Table [dbo].[ApplicationStory]    Script Date: 09/03/2012 14:42:14 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[ApplicationStory](
	[Id] [uniqueidentifier] NOT NULL,
	[IdKontakt] [uniqueidentifier] NULL,
	[IdIndCode] [uniqueidentifier] NULL,
	[Bezeichnung] [nvarchar](250) NOT NULL,
	[Verarbeitung] [nvarchar](max) NULL,
	[Modified] [datetime] NOT NULL,
 CONSTRAINT [PK_ApplicationStory_1] PRIMARY KEY CLUSTERED 
(
	[Id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object:  Table [dbo].[ApplicatonStoryDokument]    Script Date: 09/03/2012 14:42:14 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[ApplicatonStoryDokument](
	[Id] [uniqueidentifier] NOT NULL,
	[IdApplicationStory] [uniqueidentifier] NOT NULL,
	[Dokument] [varbinary](max) NULL,
	[DokumentName] [nvarchar](50) NULL,
	[Primary] [bit] NOT NULL,
	[Modified] [datetime] NOT NULL,
 CONSTRAINT [PK_ApplicatonStoryDokument_1] PRIMARY KEY CLUSTERED 
(
	[Id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
/****** Object:  Table [dbo].[ApplicationStoryArtikel]    Script Date: 09/03/2012 14:42:14 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[ApplicationStoryArtikel](
	[Id] [uniqueidentifier] NOT NULL,
	[IdApplicationStory] [uniqueidentifier] NOT NULL,
	[ArtikelNr] [nvarchar](13) NULL,
	[Beschreibung] [nvarchar](500) NULL,
	[Modified] [datetime] NULL,
 CONSTRAINT [PK_ApplicationStoryArtikel] PRIMARY KEY CLUSTERED 
(
	[Id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Bezug zu PtsCode' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'ApplicationStoryArtikel', @level2type=N'COLUMN',@level2name=N'ArtikelNr'
GO
/****** Object:  Table [dbo].[ApplicationStoryAnforderung]    Script Date: 09/03/2012 14:42:14 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[ApplicationStoryAnforderung](
	[Id] [uniqueidentifier] NOT NULL,
	[IdApplicationStory] [uniqueidentifier] NOT NULL,
	[Anforderung] [nvarchar](max) NOT NULL,
	[Modified] [datetime] NOT NULL,
 CONSTRAINT [PK_ApplicationStoryEigenschaft_1] PRIMARY KEY CLUSTERED 
(
	[Id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object:  Table [dbo].[PartnerArt]    Script Date: 09/03/2012 14:42:14 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[PartnerArt](
	[Id] [uniqueidentifier] NOT NULL,
	[Bezeichnung] [nvarchar](50) NOT NULL,
	[Zusatz] [nvarchar](500) NULL,
	[Modified] [datetime] NOT NULL,
 CONSTRAINT [PK_Partner] PRIMARY KEY CLUSTERED 
(
	[Id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object:  Table [dbo].[ApplicationStoryPartner]    Script Date: 09/03/2012 14:42:14 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[ApplicationStoryPartner](
	[Id] [uniqueidentifier] NOT NULL,
	[IdApplicationStory] [uniqueidentifier] NOT NULL,
	[IdPartner] [uniqueidentifier] NULL,
	[Bezeichnung] [nvarchar](50) NULL,
	[Modified] [datetime] NULL,
 CONSTRAINT [PK_ApplicationStoryPartner] PRIMARY KEY CLUSTERED 
(
	[Id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object:  Default [DF_ApplicationStory_Id]    Script Date: 09/03/2012 14:42:14 ******/
ALTER TABLE [dbo].[ApplicationStory] ADD  CONSTRAINT [DF_ApplicationStory_Id]  DEFAULT (newid()) FOR [Id]
GO
/****** Object:  Default [DF_ApplicationStory_Modified]    Script Date: 09/03/2012 14:42:14 ******/
ALTER TABLE [dbo].[ApplicationStory] ADD  CONSTRAINT [DF_ApplicationStory_Modified]  DEFAULT (getdate()) FOR [Modified]
GO
/****** Object:  Default [DF_ApplicationStoryEigenschaft_Id]    Script Date: 09/03/2012 14:42:14 ******/
ALTER TABLE [dbo].[ApplicationStoryAnforderung] ADD  CONSTRAINT [DF_ApplicationStoryEigenschaft_Id]  DEFAULT (newid()) FOR [Id]
GO
/****** Object:  Default [DF_ApplicationStoryEigenschaft_Modified]    Script Date: 09/03/2012 14:42:14 ******/
ALTER TABLE [dbo].[ApplicationStoryAnforderung] ADD  CONSTRAINT [DF_ApplicationStoryEigenschaft_Modified]  DEFAULT (getdate()) FOR [Modified]
GO
/****** Object:  Default [DF_ApplicationStoryArtikel_Id]    Script Date: 09/03/2012 14:42:14 ******/
ALTER TABLE [dbo].[ApplicationStoryArtikel] ADD  CONSTRAINT [DF_ApplicationStoryArtikel_Id]  DEFAULT (newid()) FOR [Id]
GO
/****** Object:  Default [DF_ApplicationStoryProdukt_Modified]    Script Date: 09/03/2012 14:42:14 ******/
ALTER TABLE [dbo].[ApplicationStoryArtikel] ADD  CONSTRAINT [DF_ApplicationStoryProdukt_Modified]  DEFAULT (getdate()) FOR [Modified]
GO
/****** Object:  Default [DF_ApplicationStoryPartner_Id]    Script Date: 09/03/2012 14:42:14 ******/
ALTER TABLE [dbo].[ApplicationStoryPartner] ADD  CONSTRAINT [DF_ApplicationStoryPartner_Id]  DEFAULT (newid()) FOR [Id]
GO
/****** Object:  Default [DF_ApplicationStoryPartner_Modified]    Script Date: 09/03/2012 14:42:14 ******/
ALTER TABLE [dbo].[ApplicationStoryPartner] ADD  CONSTRAINT [DF_ApplicationStoryPartner_Modified]  DEFAULT (getdate()) FOR [Modified]
GO
/****** Object:  Default [DF_ApplicatonStoryDokument_Id]    Script Date: 09/03/2012 14:42:14 ******/
ALTER TABLE [dbo].[ApplicatonStoryDokument] ADD  CONSTRAINT [DF_ApplicatonStoryDokument_Id]  DEFAULT (newid()) FOR [Id]
GO
/****** Object:  Default [DF_ApplicatonStoryDokument_Primary]    Script Date: 09/03/2012 14:42:14 ******/
ALTER TABLE [dbo].[ApplicatonStoryDokument] ADD  CONSTRAINT [DF_ApplicatonStoryDokument_Primary]  DEFAULT ((0)) FOR [Primary]
GO
/****** Object:  Default [DF_ApplicatonStoryDokument_Modified]    Script Date: 09/03/2012 14:42:14 ******/
ALTER TABLE [dbo].[ApplicatonStoryDokument] ADD  CONSTRAINT [DF_ApplicatonStoryDokument_Modified]  DEFAULT (getdate()) FOR [Modified]
GO
/****** Object:  Default [DF_IndCodes_Id]    Script Date: 09/03/2012 14:42:14 ******/
ALTER TABLE [dbo].[IndCodes] ADD  CONSTRAINT [DF_IndCodes_Id]  DEFAULT (newid()) FOR [Id]
GO
/****** Object:  Default [DF_IndCodes_Modified]    Script Date: 09/03/2012 14:42:14 ******/
ALTER TABLE [dbo].[IndCodes] ADD  CONSTRAINT [DF_IndCodes_Modified]  DEFAULT (getdate()) FOR [Modified]
GO
/****** Object:  Default [DF_Kontakt_Id]    Script Date: 09/03/2012 14:42:14 ******/
ALTER TABLE [dbo].[Kontakt] ADD  CONSTRAINT [DF_Kontakt_Id]  DEFAULT (newid()) FOR [Id]
GO
/****** Object:  Default [DF_Kontakt_Modified]    Script Date: 09/03/2012 14:42:14 ******/
ALTER TABLE [dbo].[Kontakt] ADD  CONSTRAINT [DF_Kontakt_Modified]  DEFAULT (getdate()) FOR [Modified]
GO
/****** Object:  Default [DF_Partner_Id]    Script Date: 09/03/2012 14:42:14 ******/
ALTER TABLE [dbo].[PartnerArt] ADD  CONSTRAINT [DF_Partner_Id]  DEFAULT (newid()) FOR [Id]
GO
/****** Object:  Default [DF_PartnerArt_Modified]    Script Date: 09/03/2012 14:42:14 ******/
ALTER TABLE [dbo].[PartnerArt] ADD  CONSTRAINT [DF_PartnerArt_Modified]  DEFAULT (getdate()) FOR [Modified]
GO
/****** Object:  ForeignKey [FK_ApplicationStory_IndCodes]    Script Date: 09/03/2012 14:42:14 ******/
ALTER TABLE [dbo].[ApplicationStory]  WITH CHECK ADD  CONSTRAINT [FK_ApplicationStory_IndCodes] FOREIGN KEY([IdIndCode])
REFERENCES [dbo].[IndCodes] ([Id])
GO
ALTER TABLE [dbo].[ApplicationStory] CHECK CONSTRAINT [FK_ApplicationStory_IndCodes]
GO
/****** Object:  ForeignKey [FK_ApplicationStory_Kontakt]    Script Date: 09/03/2012 14:42:14 ******/
ALTER TABLE [dbo].[ApplicationStory]  WITH CHECK ADD  CONSTRAINT [FK_ApplicationStory_Kontakt] FOREIGN KEY([IdKontakt])
REFERENCES [dbo].[Kontakt] ([Id])
GO
ALTER TABLE [dbo].[ApplicationStory] CHECK CONSTRAINT [FK_ApplicationStory_Kontakt]
GO
/****** Object:  ForeignKey [FK_ApplicationStoryEigenschaft_ApplicationStory]    Script Date: 09/03/2012 14:42:14 ******/
ALTER TABLE [dbo].[ApplicationStoryAnforderung]  WITH CHECK ADD  CONSTRAINT [FK_ApplicationStoryEigenschaft_ApplicationStory] FOREIGN KEY([IdApplicationStory])
REFERENCES [dbo].[ApplicationStory] ([Id])
ON DELETE CASCADE
GO
ALTER TABLE [dbo].[ApplicationStoryAnforderung] CHECK CONSTRAINT [FK_ApplicationStoryEigenschaft_ApplicationStory]
GO
/****** Object:  ForeignKey [FK_ApplicationStoryArtikel_ApplicationStory]    Script Date: 09/03/2012 14:42:14 ******/
ALTER TABLE [dbo].[ApplicationStoryArtikel]  WITH CHECK ADD  CONSTRAINT [FK_ApplicationStoryArtikel_ApplicationStory] FOREIGN KEY([IdApplicationStory])
REFERENCES [dbo].[ApplicationStory] ([Id])
ON DELETE CASCADE
GO
ALTER TABLE [dbo].[ApplicationStoryArtikel] CHECK CONSTRAINT [FK_ApplicationStoryArtikel_ApplicationStory]
GO
/****** Object:  ForeignKey [FK_ApplicationStoryPartner_ApplicationStory]    Script Date: 09/03/2012 14:42:14 ******/
ALTER TABLE [dbo].[ApplicationStoryPartner]  WITH CHECK ADD  CONSTRAINT [FK_ApplicationStoryPartner_ApplicationStory] FOREIGN KEY([IdPartner])
REFERENCES [dbo].[PartnerArt] ([Id])
ON DELETE CASCADE
GO
ALTER TABLE [dbo].[ApplicationStoryPartner] CHECK CONSTRAINT [FK_ApplicationStoryPartner_ApplicationStory]
GO
/****** Object:  ForeignKey [FK_ApplicationStoryPartner_ApplicationStory1]    Script Date: 09/03/2012 14:42:14 ******/
ALTER TABLE [dbo].[ApplicationStoryPartner]  WITH CHECK ADD  CONSTRAINT [FK_ApplicationStoryPartner_ApplicationStory1] FOREIGN KEY([IdApplicationStory])
REFERENCES [dbo].[ApplicationStory] ([Id])
GO
ALTER TABLE [dbo].[ApplicationStoryPartner] CHECK CONSTRAINT [FK_ApplicationStoryPartner_ApplicationStory1]
GO
/****** Object:  ForeignKey [FK_ApplicatonStoryDokument_ApplicationStory]    Script Date: 09/03/2012 14:42:14 ******/
ALTER TABLE [dbo].[ApplicatonStoryDokument]  WITH CHECK ADD  CONSTRAINT [FK_ApplicatonStoryDokument_ApplicationStory] FOREIGN KEY([IdApplicationStory])
REFERENCES [dbo].[ApplicationStory] ([Id])
ON DELETE CASCADE
GO
ALTER TABLE [dbo].[ApplicatonStoryDokument] CHECK CONSTRAINT [FK_ApplicatonStoryDokument_ApplicationStory]
GO


Und der Fehler ist:> Fehlermeldung:

System.InvalidOperationException wurde nicht behandelt.
Message=Der Vorgang ist fehlgeschlagen: Die Beziehung konnte nicht geändert werden, da für mindestens eine der Fremdschlüsseleigenschaften keine NULL-Werte zulässig sind. Wenn eine Beziehung geändert wird, wird die verwandte Fremdschlüsseleigenschaft auf einen NULL-Wert festgelegt. Wenn der Fremdschlüssel keine NULL-Werte unterstützt, muss eine neue Beziehung definiert, die Fremdschlüsseleigenschaft einem anderen Nicht-NULL-Wert zugeordnet oder das nicht verwandte Objekt gelöscht werden.
Source=System.Data.Entity
StackTrace:
bei System.Data.Objects.ObjectContext.SaveChanges(SaveOptions options)
bei System.Data.Objects.ObjectContext.SaveChanges()
bei ApplicationStoryDataAccess.StoryDataManager.SaveStories() in C:\Projekte\DEV\ApplicationStory\ApplicationStoryDataAccess\StoryDataManager.cs:Zeile 108.
bei ApplicationStoryUI.Main.toolStripItem1_Click(Object sender, EventArgs args) in C:\Projekte\DEV\ApplicationStory\ApplicationStoryUI\Main.cs:Zeile 692.
bei System.Windows.Forms.ToolStripItem.RaiseEvent(Object key, EventArgs e)
bei System.Windows.Forms.ToolStripMenuItem.OnClick(EventArgs e)
bei System.Windows.Forms.ToolStripItem.HandleClick(EventArgs e)
bei System.Windows.Forms.ToolStripItem.HandleMouseUp(MouseEventArgs e)
bei System.Windows.Forms.ToolStripItem.FireEventInteractive(EventArgs e, ToolStripItemEventType met)
bei System.Windows.Forms.ToolStripItem.FireEvent(EventArgs e, ToolStripItemEventType met)
bei System.Windows.Forms.ToolStrip.OnMouseUp(MouseEventArgs mea)
bei System.Windows.Forms.ToolStripDropDown.OnMouseUp(MouseEventArgs mea)
bei System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
bei System.Windows.Forms.Control.WndProc(Message& m)
bei System.Windows.Forms.ScrollableControl.WndProc(Message& m)
bei System.Windows.Forms.ToolStrip.WndProc(Message& m)
bei System.Windows.Forms.ToolStripDropDown.WndProc(Message& m)
bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
bei System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
bei System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
bei System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
bei System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
bei System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
bei System.Windows.Forms.Application.Run(Form mainForm)
bei ApplicationStoryUI.Program.Main() in C:\Projekte\DEV\ApplicationStory\ApplicationStoryUI\Program.cs:Zeile 18.
bei System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
bei System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
bei Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
bei System.Threading.ThreadHelper.ThreadStart_Context(Object state)
bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
bei System.Threading.ThreadHelper.ThreadStart()
InnerException:

03.09.2012 - 14:37 Uhr

In der InnerException steht leider NULL drin.

BTW: für ID verwendest du eine GUID und da ist es besser statt NEWID() eine sequentielle GUID zu verwenden, da so der Index vom Primärschlüssel nicht bei jedem INSERT/DELETE neu aufgebaut werden muss. Verwende also NEWSEQUENTIALID() als Standardwert für die GUID-IDs.

Danke für den Tipp, kannte ich gar nicht ....[NEWSEQUENTIALID]

Bei den anderen Tabellen habe ich das ON DELETE CASCADE noch nicht dabei.
Hatte gedacht, bei den Testdaten habe ich 1 Story und 1 Anforderung. Probier ich gleich aus.

03.09.2012 - 14:12 Uhr

Hm, irgendwie bekomme ich immer noch die gleiche Fehlermeldung.
Irgendwas klemmt bei mir (im Kopf) (noch).
Hier mal ein Ausschnitt meiner 2 Tabellen (Dateianhang).
Tabelle 1 ApplicationStory, Tabelle 2 ApplicationStoryAnforderung

Dann habe ich in der Tabellendefinition folgendes festgelegt:


USE [MIS]
GO

/****** Object:  Table [dbo].[ApplicationStory]    Script Date: 09/03/2012 14:05:31 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[ApplicationStory](
	[Id] [uniqueidentifier] NOT NULL,
	[IdKontakt] [uniqueidentifier] NULL,
	[IdIndCode] [uniqueidentifier] NULL,
	[Bezeichnung] [nvarchar](250) NOT NULL,
	[Verarbeitung] [nvarchar](max) NULL,
	[Modified] [datetime] NOT NULL,
 CONSTRAINT [PK_ApplicationStory_1] PRIMARY KEY CLUSTERED 
(
	[Id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

ALTER TABLE [dbo].[ApplicationStory]  WITH CHECK ADD  CONSTRAINT [FK_ApplicationStory_IndCodes] FOREIGN KEY([IdIndCode])
REFERENCES [dbo].[IndCodes] ([Id])
GO

ALTER TABLE [dbo].[ApplicationStory] CHECK CONSTRAINT [FK_ApplicationStory_IndCodes]
GO

ALTER TABLE [dbo].[ApplicationStory]  WITH CHECK ADD  CONSTRAINT [FK_ApplicationStory_Kontakt] FOREIGN KEY([IdKontakt])
REFERENCES [dbo].[Kontakt] ([Id])
GO

ALTER TABLE [dbo].[ApplicationStory] CHECK CONSTRAINT [FK_ApplicationStory_Kontakt]
GO

ALTER TABLE [dbo].[ApplicationStory] ADD  CONSTRAINT [DF_ApplicationStory_Id]  DEFAULT (newid()) FOR [Id]
GO

ALTER TABLE [dbo].[ApplicationStory] ADD  CONSTRAINT [DF_ApplicationStory_Modified]  DEFAULT (getdate()) FOR [Modified]
GO




Tabelle ApplicationStoryAnforderung


USE [MIS]
GO

/****** Object:  Table [dbo].[ApplicationStoryAnforderung]    Script Date: 09/03/2012 14:06:05 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[ApplicationStoryAnforderung](
	[Id] [uniqueidentifier] NOT NULL,
	[IdApplicationStory] [uniqueidentifier] NOT NULL,
	[Anforderung] [nvarchar](max) NOT NULL,
	[Modified] [datetime] NOT NULL,
 CONSTRAINT [PK_ApplicationStoryEigenschaft_1] PRIMARY KEY CLUSTERED 
(
	[Id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

ALTER TABLE [dbo].[ApplicationStoryAnforderung]  WITH CHECK ADD  CONSTRAINT [FK_ApplicationStoryEigenschaft_ApplicationStory] FOREIGN KEY([IdApplicationStory])
REFERENCES [dbo].[ApplicationStory] ([Id])
ON DELETE CASCADE
GO

ALTER TABLE [dbo].[ApplicationStoryAnforderung] CHECK CONSTRAINT [FK_ApplicationStoryEigenschaft_ApplicationStory]
GO

ALTER TABLE [dbo].[ApplicationStoryAnforderung] ADD  CONSTRAINT [DF_ApplicationStoryEigenschaft_Id]  DEFAULT (newid()) FOR [Id]
GO

ALTER TABLE [dbo].[ApplicationStoryAnforderung] ADD  CONSTRAINT [DF_ApplicationStoryEigenschaft_Modified]  DEFAULT (getdate()) FOR [Modified]
GO




Hier habe ich das ON DELETE CASCADE

Hast du noch einen tipp für mich;)
LG

03.09.2012 - 12:11 Uhr

verwendetes Datenbanksystem: SQL2008
Hallo,
ich verwende .NET 4.0, zusammen mit EF4.
Ich möchte einfach ein Objekt löschen. Lt. Doku verwende ich:

ObjectContext.DeleteObject-Methode
Markiert ein Objekt aus dem ObjectStateManager zum Löschen.Das Objekt wird in der Datenquelle gelöscht, wenn die SaveChanges-Methode aufgerufen wird.

Wenn das übergeordnete Objekt gelöscht wird, werden auch alle untergeordneten Objekte in der eingeschränkten Beziehung gelöscht.Das Ergebnis entspricht dem Aktivieren der CascadeDelete-Eigenschaft in der Zuordnung für die Beziehung.

Die DeleteObject-Methode kann für bereits gelöschte Objekte aufgerufen werden.

Setze ich das in meiner Anwendung um


public bool MarkStoryForDeletion(ApplicationStory story)
 {
            Context.DeleteObject(story);
            
            return true;
}


if ((dataGridViewStories.SelectedRows != null) && (dataGridViewStories.SelectedRows.Count > 0))
            {
                mgr.MarkStoryForDeletion((ApplicationStory)dataGridViewStories.SelectedRows[0].DataBoundItem);
                mgr.SaveStories();
                //Grid aktualisieren
                dataGridViewStories.Rows.RemoveAt(dataGridViewStories.CurrentRow.Index);
            }


public string SaveStories()
        {
            //Optional für Anzeige der Anzahl der geänderten Daten
            string ret = string.Empty;

            ret += "Geändert: " +
                   Context.ObjectStateManager.GetObjectStateEntries(System.Data.EntityState.Modified).Count();
            ret += "Neu: " +
                   Context.ObjectStateManager.GetObjectStateEntries(System.Data.EntityState.Added).Count();
            ret += "Gelöscht: " +
                   Context.ObjectStateManager.GetObjectStateEntries(System.Data.EntityState.Deleted).Count();
          
            
            Context.SaveChanges();
            
            return ret;
        }

bekomme ich eine Fehlermeldung.> Fehlermeldung:

System.InvalidOperationException wurde nicht behandelt.
Message=Der Vorgang ist fehlgeschlagen: Die Beziehung konnte nicht geändert werden, da für mindestens eine der Fremdschlüsseleigenschaften keine NULL-Werte zulässig sind. Wenn eine Beziehung geändert wird, wird die verwandte Fremdschlüsseleigenschaft auf einen NULL-Wert festgelegt. Wenn der Fremdschlüssel keine NULL-Werte unterstützt, muss eine neue Beziehung definiert, die Fremdschlüsseleigenschaft einem anderen Nicht-NULL-Wert zugeordnet oder das nicht verwandte Objekt gelöscht werden.

Was hab ich hier nicht verstanden? Ich lese auch immer wieder etwas von der CascadeDelete Eigenschaft. Habe ich vergessen, diese zu aktivieren?
Danke für jeden Tipp.

05.07.2012 - 12:37 Uhr

Yup, werd ich tun.

05.07.2012 - 11:29 Uhr

Läuft ... Tausend Dank, auch für den Link.

Danke.

05.07.2012 - 11:16 Uhr

Ich werd mich mal durch das LINQ Tutorial wühlen, da ist bestimmt was dabei.
Danke.

05.07.2012 - 11:13 Uhr

Hi,
ganz so funktioniert das dann doch nicht:


var buchQuery =
                        context.Bucher.Where(
                            b => b.Bezeichnung.Contains(keyword) || 
                                b.Verarbeitung.Contains(keyword) ||
                                b.Buchkritik.Where(a => a.BEM1.Contains(keyword)));

Ich dachte so würde das evtl gehen. Zwischen Buch und Buchkritik gibt es eine 1:n Beziehung. Tut es aber nicht.
Wenn ich das Beispiel von Abt nehme, kann ich nicht direkt auf buchEntity.BuchKiritik.BEM1 zugreifen. Hmmmm.

Danke.

05.07.2012 - 10:50 Uhr

Super danke danke.
Das ist genau, was ich gesucht habe.
Danke.

05.07.2012 - 10:37 Uhr

verwendetes Datenbanksystem: <MSSQL2008R2>, EF4

Hallo,
ist es möglich via einem JOIN (spannender wie), die Daten in meinem Entity Framework Kontext über mehrere Referenzen zu filtern.

Beispiel:


ObjectParameter param = new ObjectParameter(
                        "p", "%" + keyword + "%");

// Abfrage auf Beschreibung 
ObjectQuery<Buch> beschrQuery =
                        context.BuchBeschreibung.Where("it.Beschreibung Like @p", param);

Das passt soweit, also hole mir alle Bücher, die xyz Beschreibungstext beinhalten.
Jetzt hab ich aber noch ein anderes Referenzobjekt, BuchKritik. Buchkritik hat auch zwei Properties: BEM1, BEM2 z.B. Jetzt möchte ich also haben:
Hole mir alle Bücher, die in Buch.Beschreibung xyz Wert haben ODER in Buchkritik.BEM1 xyz haben ODER in Buchkritik.BEM2 xyz haben.
Geht so etwas mit LINQ?
Danke.

27.06.2012 - 13:07 Uhr

Und das ist mein Kontakte Manager


public class KontakteDataManager : IDisposable
    {
        // Eine Instanz des Entity-Framework-Kontextes pro Manager-Instanz
        private StoryEntities context;

        /// <summary>
        /// Standardkonstruktor
        /// </summary>
        public KontakteDataManager()
        {
            context= new StoryEntities();
        }

        /// <summary>
        /// Erzeugt eine neue Instanz der <see cref="KontakteDataManager"/> Klasse.
        /// </summary>
        /// <param name="entities">StoryEntities</param>
        public KontakteDataManager(StoryEntities entities)
        {
            context = entities;
        }
        
        /// <summary>
        /// Wichtige Überladung für Services, 
        /// da bei Serialisierung Verfolgung der Navigationseigenschaften verhindert werden muss!
        /// </summary> 
        public KontakteDataManager(bool lazyLoading = false):this()
        {
            context.ContextOptions.LazyLoadingEnabled = lazyLoading;
        }

        public void Dispose()
        {
            context.Dispose();
        }

        /// <summary>
        /// Holt einen bestimmten Kontakt zu einer ApplicationStory
        /// </summary>
        /// <param name="story"></param>
        /// <returns></returns>
        public Kontakt GetKontakt(ApplicationStory story)
        {
            var k = (from a in context.Kontakt where a.Id == story.IdKontakt select a).SingleOrDefault();
            return k;
        }

        /// <summary>
        /// Hole alle Kontakte
        /// </summary>
        /// <returns></returns>
        public List<Kontakt> GetKontakte()
        {
            List<Kontakt> kontakte = (from k in context.Kontakt select k).ToList();
            return kontakte;
        }
        
    }

also nichts spektakulätes

27.06.2012 - 12:58 Uhr

Hallo,
also in der Tat, meine Lösung funktioniert, auch mit dem Speichern der Objekte ...
Was mache ich:


#region Kontakte Combobox
var kontakte = storyMgr.GetKontakte();
cboKontakt.DataSource = kontakte;
cboKontakt.DisplayMember = "FullName";
cboKontakt.DataBindings.Add("Text", selectedStory.Kontakt, "FullName"); 
#endregion

Dabei ist selectedStory die gerade aktuelle "Story"
Story hat eine Referenz (Entität) auf einen Kontakt.
Merken, wenn neu zugewiesen


private void cboKontakt_SelectionChangeCommitted(object sender, EventArgs e)
{
      selectedStory.Kontakt = (Kontakt) cboKontakt.SelectedItem;
}

Mein Ziel war es, sobald er eben eine "Story" (vorhin hatte ich Produkt geschrieben, ist aber dasselbe), wechselt, und zurück auf die alte geht, dass er im EF-Kontext diese Änderung noch drin hat, und wieder auf den neuen Kontakt wechselt.

Ich hatte sogar den Fall, dass, nach deiner Lösung, zwar der Wert korrekt zugewiesen wurde, wenn ich aber zurück gehe, auf die alte Story, ist der Ursprungswert wieder drin.
LG

Und das mit dem NULL ist so. Musst DU also zusehen das das nicht passiert.

Okay, gut ... find ich nur spannend, dass das ausgefeilte EF das so handelt, bzw. nicht das EF, sondern das Databinding an die Combobox. Ist ja nicht ungewöhnlich, dass NULL Werte in der DB vorhanden sind.
Aber gut. Ist halt so.

27.06.2012 - 10:28 Uhr

Okay,
jetzt bin ich soweit, dass es funktioniert, also sowohl mit meiner Lösung als auch mit deiner Lösung ...

Das Problem was ich jetzt habe ist, dass FALLS mal kein Kontakt zugewiesen wurde (durchaus möglich) - NULL - Referenz drin steht .... dann hauts mich auf die Nase.
Der Wert darf nicht NULL sein.
Parametername: dataSource