Closed neoGeneva closed 5 years ago
Hello @neoGeneva ,
Thank you for reporting, we will look at it today.
We will change all backslashes
for foward slashes
which seem to be the standard everywhere.
Best Regards,
Jonathan
Hey, thanks for that.
I managed to get things working locally by writing my own implementation of UseDatabaseFirstManager.Execute()
, note that I'm calling OutputXml()
twice, once with the full path and a second time with just the name because after fixing the slashes (which solved my initial problem) I started getting The given key 'DataModel.csdl' was not present in the dictionary.
when callingDbContextExtensions.UpdateFromQuery()
Here's my working hack:
namespace Z.EntityFramework.Classic.Hacks
{
// THIS IS A HACK TO DEAL WITH Z.EntityFramework.Classic ASSUMING WINDOWS PATHS
internal class UseDatabaseFirstManager
{
internal static void Execute(string modelName)
{
var path = Path.Combine(Directory.GetCurrentDirectory(), modelName);
var fileInfo = new FileInfo(path);
using (StreamReader reader = new StreamReader(fileInfo.FullName))
{
// GET model element
XmlElement conceptualSchemaElement;
XmlElement mappingElement;
XmlElement storageSchemaElement;
string processingValue;
EntityDesignerUtils.ExtractConceptualMappingAndStorageNodes(reader, out conceptualSchemaElement, out mappingElement, out storageSchemaElement, out processingValue);
// SAVE model element
OutputXml(Path.ChangeExtension(fileInfo.FullName, "csdl"), conceptualSchemaElement);
OutputXml(Path.ChangeExtension(fileInfo.Name, "csdl"), conceptualSchemaElement);
OutputXml(Path.ChangeExtension(fileInfo.FullName, "msl"), mappingElement);
OutputXml(Path.ChangeExtension(fileInfo.Name, "msl"), mappingElement);
OutputXml(Path.ChangeExtension(fileInfo.FullName, "ssdl"), storageSchemaElement);
OutputXml(Path.ChangeExtension(fileInfo.Name, "ssdl"), storageSchemaElement);
}
}
private static void OutputXml(string outputPath, XmlElement xmlElement)
{
var type = Type.GetType("Z.EntityFramework.Classic.UseDatabaseFirstManager, Z.EntityFramework.Classic, Version=7.0.0.0, Culture=neutral, PublicKeyToken=afc61983f100d280");
var method = type.GetMethod("OutputXml", BindingFlags.Static | BindingFlags.NonPublic);
method.Invoke(null, new object[] { outputPath, xmlElement });
}
}
internal static class EntityDesignerUtils
{
internal static void ExtractConceptualMappingAndStorageNodes(StreamReader edmxInputStream, out XmlElement conceptualSchemaNode, out XmlElement mappingNode, out XmlElement storageSchemaNode, out string metadataArtifactProcessingValue)
{
var type = Type.GetType("Z.EntityFramework.Classic.EntityDesignerUtils, Z.EntityFramework.Classic, Version=7.0.0.0, Culture=neutral, PublicKeyToken=afc61983f100d280");
var method = type.GetMethod("ExtractConceptualMappingAndStorageNodes", BindingFlags.Static | BindingFlags.NonPublic);
var parameters = new object[] { edmxInputStream, null, null, null, null };
method.Invoke(null, parameters);
conceptualSchemaNode = (XmlElement)parameters[1];
mappingNode = (XmlElement)parameters[2];
storageSchemaNode = (XmlElement)parameters[3];
metadataArtifactProcessingValue = (string)parameters[4];
}
}
}
Nice hack ;)
Unfortunately, EFE has been built with windows
path as well otherwise your fix would have worked great.
A new version v7.0.15 has been released.
We should now replace all \
by /
to support all systems.
Let me know if that is working correctly on your side.
Best Regards,
Jonathan
Thanks! I've got the latest version and it works great, so thanks again!
When using a linux path when calling
EntityFrameworkManager.UseDatabaseFirst()
aDirectoryNotFoundException
exception is thrown: