mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-09-18 09:44:20 +08:00
Adding SqlCe DataServicesProvider implementation
--HG-- branch : dev
This commit is contained in:
@@ -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)" />
|
||||
-->
|
||||
|
65
src/Orchard/Data/Providers/SqlCeDataServicesProvider.cs
Normal file
65
src/Orchard/Data/Providers/SqlCeDataServicesProvider.cs
Normal 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);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@@ -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" />
|
||||
|
Reference in New Issue
Block a user