2011-06-11 3 views
2

Ok, les gars, ça me rend fou. J'ai obtenu l'entité (odata) suivante qui représente une structure de page dans laquelle chaque page peut avoir des enfants et des parents. (Fondamentalement, un graphique dans lequel tous les nœuds pourraient être connectés). Dans la base de données, il est représenté par une relation plusieurs-à-plusieurs avec deux tables Page <-> PagePage <-> Page.OData et insertion (AddLink) de relations plusieurs-à-plusieurs

Page Entity

Le problème est, je ne suis pas en mesure d'insérer une nouvelle entité, y compris une relation. La dernière chose que j'ai essayé était:

Page page = new Page() 
    { 
     Id = Guid.NewGuid(), 
     Title = "New Page", 
     Created = DateTime.Now, 
     LastChanged = DateTime.Now, 
     IsRedirected = false, 
     Position = 0, 
     Html = "Add your HTML here.", 
     Parent = { parent } 
    }; 

    this.Context.AddToPages(page); 
    this.Context.AddLink(parent, "Children", page); 
    parent.Children.Add(page); 
    this.Context.SaveChanges(); 

Je ne peux penser à rien d'autre à essayer. Est-ce que quelqu'un a craqué celui-ci?

Edit 1: Voici une photo du schéma de base de données: db diagram

Edit 2: Détails de l'exception:

System.Data.Services.Client.DataServiceRequestException was unhandled 
    Message=An error occurred while processing this request. 
    Source=System.Data.Services.Client 
    StackTrace: 
     at System.Data.Services.Client.DataServiceContext.SaveResult.HandleBatchResponse() 
     at System.Data.Services.Client.DataServiceContext.SaveResult.EndRequest() 
     at System.Data.Services.Client.DataServiceContext.SaveChanges(SaveChangesOptions options) 
     at System.Data.Services.Client.DataServiceContext.SaveChanges() 
     at PortfolioManagementConsole.Models.PageViewModel.SaveChanges(Object parameter) in C:\Users\Daniel\documents\visual studio 2010\Projects\PortfolioManagementService\PortfolioManagementConsole\Models\PageViewModel.cs:line 59 
     at PortfolioManagementConsole.Common.RelayCommand.Execute(Object parameter) in C:\Users\Daniel\documents\visual studio 2010\Projects\PortfolioManagementService\PortfolioManagementConsole\Common\RelayCommand.cs:line 52 
     at MS.Internal.Commands.CommandHelpers.CriticalExecuteCommandSource(ICommandSource commandSource, Boolean userInitiated) 
     at System.Windows.Controls.Primitives.ButtonBase.OnClick() 
     at System.Windows.Controls.Button.OnClick() 
     at Telerik.Windows.Controls.RadButton.OnClick() in c:\Builds\WPF_Scrum\Release_WPF\Sources\Development\Core\Controls\Buttons\RadButton.cs:line 348 
     at System.Windows.Controls.Primitives.ButtonBase.OnMouseLeftButtonUp(MouseButtonEventArgs e) 
     at System.Windows.UIElement.OnMouseLeftButtonUpThunk(Object sender, MouseButtonEventArgs e) 
     at System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget) 
     at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target) 
     at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs) 
     at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised) 
     at System.Windows.UIElement.ReRaiseEventAs(DependencyObject sender, RoutedEventArgs args, RoutedEvent newEvent) 
     at System.Windows.UIElement.OnMouseUpThunk(Object sender, MouseButtonEventArgs e) 
     at System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget) 
     at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target) 
     at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs) 
     at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised) 
     at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args) 
     at System.Windows.UIElement.RaiseTrustedEvent(RoutedEventArgs args) 
     at System.Windows.UIElement.RaiseEvent(RoutedEventArgs args, Boolean trusted) 
     at System.Windows.Input.InputManager.ProcessStagingArea() 
     at System.Windows.Input.InputManager.ProcessInput(InputEventArgs input) 
     at System.Windows.Input.InputProviderSite.ReportInput(InputReport inputReport) 
     at System.Windows.Interop.HwndMouseInputProvider.ReportInput(IntPtr hwnd, InputMode mode, Int32 timestamp, RawMouseActions actions, Int32 x, Int32 y, Int32 wheel) 
     at System.Windows.Interop.HwndMouseInputProvider.FilterMessage(IntPtr hwnd, WindowMessage msg, IntPtr wParam, IntPtr lParam, Boolean& handled) 
     at System.Windows.Interop.HwndSource.InputFilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled) 
     at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled) 
     at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o) 
     at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs) 
     at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler) 
     at System.Windows.Threading.Dispatcher.InvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs) 
     at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam) 
     at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg) 
     at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame) 
     at System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame frame) 
     at System.Windows.Threading.Dispatcher.Run() 
     at System.Windows.Application.RunDispatcher(Object ignore) 
     at System.Windows.Application.RunInternal(Window window) 
     at System.Windows.Application.Run(Window window) 
     at System.Windows.Application.Run() 
     at PortfolioManagementConsole.App.Main() in C:\Users\Daniel\documents\visual studio 2010\Projects\PortfolioManagementService\PortfolioManagementConsole\obj\x86\Debug\App.g.cs:line 0 
     at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) 
     at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) 
     at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() 
     at System.Threading.ThreadHelper.ThreadStart_Context(Object state) 
     at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx) 
     at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 
     at System.Threading.ThreadHelper.ThreadStart() 
    InnerException: System.Data.Services.Client.DataServiceClientException 
     Message=<?xml version="1.0" encoding="utf-8" standalone="yes"?> 
<error xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"> 
    <code></code> 
    <message xml:lang="de-CH">An error occurred while processing this request.</message> 
</error> 
     Source=System.Data.Services.Client 
     StatusCode=500 
     StackTrace: 
      at System.Data.Services.Client.DataServiceContext.SaveResult.<HandleBatchResponse>d__1e.MoveNext() 
     InnerException: 
+0

Quelle erreur obtenez-vous? Ou est-ce juste que l'entité ne semble pas être insérée? – svick

+0

Il existe une exception DataServiceRequestException dans la méthode context.SaveChanges(). –

+0

Et le message de l'exception? – svick

Répondre

0

Votre serveur WCF Data Services ne renvoie pas les messages d'erreur détaillés et Cela ne vous aide pas à définir le message d'erreur exact renvoyé par le serveur. Suivez ces instructions pour activer les messages d'erreur verbeux du serveur: http://blogs.msdn.com/b/phaniraj/archive/2008/06/18/debugging-ado-net-data-services.aspx. Après avoir activé ceci, vous devriez être en mesure de voir le message d'erreur lancé par le serveur. En regardant votre modèle, vous avez besoin d'un autre lien entre l'enfant et le parent. Ajouter cette ligne au code juste avant SaveChanges:

this.Context.SetLink (page, "Parent", parent);

Pour aider à mieux comprendre, voici quelques liens sur mon blog où je détaille la façon dont on travaille avec les associations utilisant le client WCF Data Services:

1 à de nombreuses associations

http://blogs.msdn.com/b/phaniraj/archive/2008/10/23/working-with-associations-in-ado-net-data-services-part-2.aspx

1 à 1 associations

http://blogs.msdn.com/b/phaniraj/archive/2008/07/02/working-with-relations-in-ado-net-data-services-beta-1.aspx