Browse Source

Fixed NullReferenceException in ICSharpCode.Data.EDMDesigner.Core.IO.SSDLIO.WriteXElement when wizard is cancelled.

pull/12/head
Daniel Grunwald 15 years ago
parent
commit
046dac649d
  1. 53
      src/AddIns/DisplayBindings/Data/ICSharpCode.Data.Addin/Templates/Files/CSharp.EDMX.xft
  2. 28
      src/AddIns/DisplayBindings/Data/ICSharpCode.Data.EDMDesigner.Core.UI/DisplayBinding/EDMDesignerDisplayBinding.cs
  3. 23
      src/AddIns/DisplayBindings/Data/ICSharpCode.Data.EDMDesigner.Core.UI/DisplayBinding/EDMDesignerViewContent.cs
  4. 3
      src/AddIns/DisplayBindings/Data/ICSharpCode.Data.EDMDesigner.Core/IO/EDMXIO.cs
  5. 17
      src/Main/Base/Project/Src/Services/File/OpenedFile.cs

53
src/AddIns/DisplayBindings/Data/ICSharpCode.Data.Addin/Templates/Files/CSharp.EDMX.xft

@ -2,33 +2,27 @@ @@ -2,33 +2,27 @@
<Template author="Philipp Maihart" version="1.0">
<Config
name = "Entity Framework Data Model"
icon = "Icons.32x32.XMLFileIcon"
category = "C#"
defaultname = "Model${Number}.edmx"
language = "C#" />
name = "Entity Framework Data Model"
icon = "Icons.32x32.XMLFileIcon"
category = "C#"
defaultname = "Model${Number}.edmx"
language = "C#" />
<Description>Entity Framework Data Model</Description>
<References>
<Reference include="System.Data">
<RequiredTargetFramework>4.0</RequiredTargetFramework>
</Reference>
<Reference include="System.Data.Entity">
<RequiredTargetFramework>4.0</RequiredTargetFramework>
</Reference>
<Reference include="System.Runtime.Serialization">
<RequiredTargetFramework>4.0</RequiredTargetFramework>
</Reference>
<Reference include="System.Security">
<RequiredTargetFramework>4.0</RequiredTargetFramework>
</Reference>
<Reference include="System.XML">
<RequiredTargetFramework>4.0</RequiredTargetFramework>
</Reference>
</References>
<!--
<References>
<Reference include="System.Data" />
<Reference include="System.Data.Entity">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference include="System.Runtime.Serialization">
<RequiredTargetFramework>3.0</RequiredTargetFramework>
</Reference>
<Reference include="System.Security" />
<Reference include="System.Xml" />
</References>
<!--
Special new file templates:
${StandardNamespace} -> Standardnamespace of the current project or FileNameWithoutExtension
${FullName} -> Full generated path name
@ -38,8 +32,8 @@ @@ -38,8 +32,8 @@
${Path} -> Full path of the file
-->
<Files>
<File name="${FullName}" language="XML" buildAction="EntityDeploy" Generator="EntityModelCodeGenerator">
<![CDATA[<?xml version="1.0" encoding="utf-8"?>
<File name="${FullName}" language="XML" buildAction="EntityDeploy" Generator="EntityModelCodeGenerator">
<![CDATA[<?xml version="1.0" encoding="utf-8"?>
<edmx:Edmx Version="1.0" xmlns:edmx="http://schemas.microsoft.com/ado/2008/10/edmx">
<!-- EF Runtime content -->
<edmx:Runtime>
@ -52,8 +46,7 @@ @@ -52,8 +46,7 @@
</edmx:Runtime>
<DesignerViews />
</edmx:Edmx>]]>
</File>
<File name="${FileNameWithoutExtension}.Designer.cs" language="C#" DependentUpon="${FileName}" SubType="Code"><![CDATA[${StandardHeader.C#}]]></File>
</File>
</Files>
<AdditionalOptions/>

28
src/AddIns/DisplayBindings/Data/ICSharpCode.Data.EDMDesigner.Core.UI/DisplayBinding/EDMDesignerDisplayBinding.cs

@ -15,16 +15,22 @@ using System.IO; @@ -15,16 +15,22 @@ using System.IO;
namespace ICSharpCode.Data.EDMDesigner.Core.UI.DisplayBinding
{
public class EDMDesignerDisplayBinding : IDisplayBinding
{
public bool CanCreateContentForFile(string fileName)
{
return Path.GetExtension(fileName).Equals(".edmx", StringComparison.OrdinalIgnoreCase);
}
public class EDMDesignerDisplayBinding : IDisplayBinding
{
public bool CanCreateContentForFile(string fileName)
{
return Path.GetExtension(fileName).Equals(".edmx", StringComparison.OrdinalIgnoreCase);
}
public IViewContent CreateContentForFile(OpenedFile file)
{
return new EDMDesignerViewContent(file);
}
}
public IViewContent CreateContentForFile(OpenedFile file)
{
try {
return new EDMDesignerViewContent(file);
} catch (WizardCancelledException) {
return null;
}
}
}
public class WizardCancelledException : Exception {}
}

23
src/AddIns/DisplayBindings/Data/ICSharpCode.Data.EDMDesigner.Core.UI/DisplayBinding/EDMDesignerViewContent.cs

@ -83,16 +83,21 @@ namespace ICSharpCode.Data.EDMDesigner.Core.UI.DisplayBinding @@ -83,16 +83,21 @@ namespace ICSharpCode.Data.EDMDesigner.Core.UI.DisplayBinding
#region Constructor
public EDMDesignerViewContent(OpenedFile primaryFile)
: base(primaryFile)
{
if (primaryFile == null)
public EDMDesignerViewContent(OpenedFile primaryFile)
: base(primaryFile)
{
if (primaryFile == null)
throw new ArgumentNullException("primaryFile");
primaryFile.ForceInitializeView(this); // call Load()
EDMDesignerChangeWatcher.AddEDMDesignerViewContent(this);
}
try {
primaryFile.ForceInitializeView(this); // call Load()
} catch (WizardCancelledException) {
this.Files.Clear(); // unregister with OpenedFile
throw;
}
EDMDesignerChangeWatcher.AddEDMDesignerViewContent(this);
}
#endregion
@ -118,7 +123,7 @@ namespace ICSharpCode.Data.EDMDesigner.Core.UI.DisplayBinding @@ -118,7 +123,7 @@ namespace ICSharpCode.Data.EDMDesigner.Core.UI.DisplayBinding
if (wizard.DialogResult == true)
_edmView = new EDMView(wizard.EDMXDocument, readMoreAction);
else
return;
throw new WizardCancelledException();
}
// Load or generate DesignerView and EntityTypeDesigners

3
src/AddIns/DisplayBindings/Data/ICSharpCode.Data.EDMDesigner.Core/IO/EDMXIO.cs

@ -170,6 +170,9 @@ namespace ICSharpCode.Data.EDMDesigner.Core.IO @@ -170,6 +170,9 @@ namespace ICSharpCode.Data.EDMDesigner.Core.IO
public static XDocument WriteXDocument(EDMView edmView)
{
if (edmView.EDM.IsEmpty) {
return WriteXDocument(null, null, null, null);
}
XElement ssdlElement = SSDLIO.WriteXElement(edmView.EDM.SSDLContainer);
XElement csdlElement = CSDLIO.Write(edmView.EDM.CSDLContainer);
XElement mslElement = MSLIO.Write(edmView.EDM);

17
src/Main/Base/Project/Src/Services/File/OpenedFile.cs

@ -284,11 +284,18 @@ namespace ICSharpCode.SharpDevelop @@ -284,11 +284,18 @@ namespace ICSharpCode.SharpDevelop
inLoadOperation = true;
Properties memento = GetMemento(newView);
using (Stream sourceStream = OpenRead()) {
currentView = newView;
// don't reset fileData if the file is untitled, because OpenRead() wouldn't be able to read it otherwise
if (this.IsUntitled == false)
fileData = null;
newView.Load(this, sourceStream);
IViewContent oldView = currentView;
try {
currentView = newView;
// don't reset fileData if the file is untitled, because OpenRead() wouldn't be able to read it otherwise
if (this.IsUntitled == false)
fileData = null;
newView.Load(this, sourceStream);
} catch {
// stay with old view in case of exceptions
currentView = oldView;
throw;
}
}
RestoreMemento(newView, memento);
} finally {

Loading…
Cancel
Save