Adding SqlCe DataServicesProvider implementation

--HG--
branch : dev
This commit is contained in:
Renaud Paquay
2010-07-13 11:20:52 -07:00
parent 02761aded2
commit b4c0007a0c
3 changed files with 92 additions and 0 deletions

View File

@@ -55,6 +55,10 @@
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\lib\fluentnhibernate\NHibernate.ByteCode.Castle.dll</HintPath>
</Reference>
<Reference Include="System.Data.SqlServerCe, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\lib\sqlce\System.Data.SqlServerCe.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.ComponentModel.DataAnnotations">
@@ -320,10 +324,32 @@
<UsingTask TaskName="Microsoft.Web.Mvc.Build.CreateAreaManifest" AssemblyName="Microsoft.Web.Mvc.Build, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
<UsingTask TaskName="Microsoft.Web.Mvc.Build.CopyAreaManifests" AssemblyName="Microsoft.Web.Mvc.Build, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
-->
<Target Name="CopySqlCeBinaries">
<ItemGroup>
<SqlCeBinariesx86 Include="..\..\lib\sqlce\x86\*.*"/>
<SqlCeBinariesx64 Include="..\..\lib\sqlce\amd64\*.*"/>
</ItemGroup>
<Copy
SourceFiles="@(SqlCeBinariesx86)"
DestinationFolder="$(ProjectDir)\bin\x86"
SkipUnchangedFiles="true"
/>
<Copy
SourceFiles="@(SqlCeBinariesx64)"
DestinationFolder="$(ProjectDir)\bin\amd64"
SkipUnchangedFiles="true"
/>
</Target>
<Target Name="AfterBuild" DependsOnTargets="AfterBuildCompiler">
<PropertyGroup>
<AreasManifestDir>$(ProjectDir)\..\Manifests</AreasManifestDir>
</PropertyGroup>
<CallTarget Targets="CopySqlCeBinaries"/>
<!-- If this is an area child project, uncomment the following line:
<CreateAreaManifest AreaName="$(AssemblyName)" AreaType="Child" AreaPath="$(ProjectDir)" ManifestPath="$(AreasManifestDir)" ContentFiles="@(Content)" />
-->

View File

@@ -0,0 +1,65 @@
using System;
using System.IO;
using FluentNHibernate.Cfg.Db;
namespace Orchard.Data.Providers {
public class SqlCeDataServicesProvider : AbstractDataServicesProvider {
private readonly string _dataFolder;
private readonly string _connectionString;
public SqlCeDataServicesProvider(string dataFolder, string connectionString) {
_dataFolder = dataFolder;
_connectionString = connectionString;
}
public static string ProviderName {
get { return "SqlCe"; }
}
public override IPersistenceConfigurer GetPersistenceConfigurer(bool createDatabase) {
var persistence = MsSqlCeConfiguration.Standard;
if (string.IsNullOrEmpty(_connectionString)) {
var dataFile = Path.Combine(_dataFolder, "Orchard.sdf");
if (!Directory.Exists(_dataFolder)) {
Directory.CreateDirectory(_dataFolder);
}
if (createDatabase && File.Exists(dataFile)) {
File.Delete(dataFile);
}
string localConnectionString = string.Format("Data Source={0}", dataFile);
if (!File.Exists(dataFile)) {
CreateSqlCeDatabaseFile(localConnectionString);
}
persistence = persistence.ConnectionString(localConnectionString);
}
else {
persistence = persistence.ConnectionString(_connectionString);
}
return persistence;
}
private void CreateSqlCeDatabaseFile(string connectionString) {
// We want to execute this code using Reflection, to avoid having a binary
// dependency on SqlCe assembly
//engine engine = new SqlCeEngine();
var sqlceEngineHandle = Activator.CreateInstance("System.Data.SqlServerCe", "System.Data.SqlServerCe.SqlCeEngine");
var engine = sqlceEngineHandle.Unwrap();
//engine.LocalConnectionString = connectionString;
engine.GetType().GetProperty("LocalConnectionString").SetValue(engine, connectionString, null/*index*/);
//engine.CreateDatabase();
engine.GetType().GetMethod("CreateDatabase").Invoke(engine, null);
//engine.Dispose();
engine.GetType().GetMethod("Dispose").Invoke(engine, null);
}
}
}

View File

@@ -393,6 +393,7 @@
<Compile Include="Data\Migration\Schema\CreateTableCommand.cs" />
<Compile Include="Data\Migration\Schema\TableCommand.cs" />
<Compile Include="Data\Migration\Schema\SchemaCommand.cs" />
<Compile Include="Data\Providers\SqlCeDataServicesProvider.cs" />
<Compile Include="Data\Providers\DataServiceParameters.cs" />
<Compile Include="Data\Providers\IDataServicesProvider.cs" />
<Compile Include="Data\Providers\SessionFactoryParameters.cs" />