Completely remove support from SQLite, use SqlCe instead

--HG--
branch : dev
rename : src/Orchard/Data/Migration/Interpreters/SqLiteCommandInterpreter.cs => src/Orchard/Data/Migration/Interpreters/SqlCeCommandInterpreter.cs
This commit is contained in:
Renaud Paquay
2010-07-13 19:49:42 -07:00
parent c0584f57a5
commit 62f900b5d8
23 changed files with 135 additions and 160 deletions

View File

@@ -79,10 +79,9 @@
<Reference Include="System.Core">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Data.SQLite, Version=1.0.65.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=x86">
<Reference Include="System.Data.SqlServerCe, Version=3.5.1.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\lib\sqlite\System.Data.SQLite.DLL</HintPath>
<Private>True</Private>
<HintPath>..\..\lib\sqlce\System.Data.SqlServerCe.dll</HintPath>
</Reference>
<Reference Include="System.Web" />
<Reference Include="System.Web.Abstractions">
@@ -149,7 +148,16 @@
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
<Target Name="CopySqlCeBinaries">
<ItemGroup>
<SqlCeBinariesx86 Include="$(ProjectDir)..\..\lib\sqlce\x86\*.*" />
<SqlCeBinariesx64 Include="$(ProjectDir)..\..\lib\sqlce\amd64\*.*" />
</ItemGroup>
<Copy SourceFiles="@(SqlCeBinariesx86)" DestinationFolder="$(ProjectDir)$(OutputPath)x86" SkipUnchangedFiles="true" />
<Copy SourceFiles="@(SqlCeBinariesx64)" DestinationFolder="$(ProjectDir)$(OutputPath)amd64" SkipUnchangedFiles="true" />
</Target>
<Target Name="AfterBuild">
<CallTarget Targets="CopySqlCeBinaries" />
</Target>
</Project>

View File

@@ -1,3 +1,3 @@
setup /SiteName:Profiling /AdminUsername:admin /AdminPassword:profiling-secret /DatabaseProvider:SQLite /EnabledFeatures:Orchard.Framework,Common,Dashboard,Feeds,HomePage,Navigation,Scheduling,Settings,XmlRpc,Orchard.Users,Orchard.Roles,TinyMce,Orchard.Modules,Orchard.Themes,Orchard.MultiTenancy,Orchard.Pages,Orchard.Blogs,Orchard.Comments,Futures.Widgets,Orchard.Media,Orchard.Tags,Orchard.DevTools
setup /SiteName:Profiling /AdminUsername:admin /AdminPassword:profiling-secret /DatabaseProvider:SqlCe /EnabledFeatures:Orchard.Framework,Common,Dashboard,Feeds,HomePage,Navigation,Scheduling,Settings,XmlRpc,Orchard.Users,Orchard.Roles,TinyMce,Orchard.Modules,Orchard.Themes,Orchard.MultiTenancy,Orchard.Pages,Orchard.Blogs,Orchard.Comments,Futures.Widgets,Orchard.Media,Orchard.Tags,Orchard.DevTools
add profiling data
feature disable Orchard.DevTools

View File

@@ -9,11 +9,11 @@ namespace Orchard.Specs.Hosting {
return new TraceEnabledBuilder(sessionFactoryParameters.DataFolder, sessionFactoryParameters.ConnectionString);
}
class TraceEnabledBuilder : SQLiteDataServicesProvider {
class TraceEnabledBuilder : SqlCeDataServicesProvider {
public TraceEnabledBuilder(string dataFolder, string connectionString) : base(dataFolder, connectionString) {
}
public override IPersistenceConfigurer GetPersistenceConfigurer(bool createDatabase) {
var config = (SQLiteConfiguration)base.GetPersistenceConfigurer(createDatabase);
var config = (MsSqlCeConfiguration)base.GetPersistenceConfigurer(createDatabase);
//config.ShowSql();
return config;
}

View File

@@ -64,13 +64,13 @@ Scenario: A new tenant with preconfigured database goes to the setup screen
| name | value |
| Name | Scott |
| RequestUrlHost | scott.example.org |
| DataProvider | SQLite |
| DataProvider | SqlCe |
And I hit "Save"
And I am redirected
And I go to "/Setup" on host scott.example.org
Then I should see "Welcome to Orchard"
And I should see "Finish Setup"
And I should not see "SQLite"
And I should not see "SQL Server Compact"
And the status should be 200 OK
Scenario: A new tenant runs the setup

View File

@@ -1,20 +1,20 @@
// ------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by SpecFlow (http://www.specflow.org/).
// SpecFlow Version:1.3.0.0
// Runtime Version:2.0.50727.4927
// SpecFlow Version:1.3.2.0
// Runtime Version:4.0.30319.1
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
// ------------------------------------------------------------------------------
#region Designer generated code
namespace Orchard.Specs
namespace Orchard.Tests
{
using TechTalk.SpecFlow;
[System.CodeDom.Compiler.GeneratedCodeAttribute("TechTalk.SpecFlow", "1.3.0.0")]
[System.CodeDom.Compiler.GeneratedCodeAttribute("TechTalk.SpecFlow", "1.3.2.0")]
[System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[NUnit.Framework.TestFixtureAttribute()]
[NUnit.Framework.DescriptionAttribute("Multiple tenant management")]
@@ -67,7 +67,7 @@ testRunner.And("I have installed \"Orchard.MultiTenancy\"");
#line 9
testRunner.When("I go to \"Admin/MultiTenancy\"");
#line 10
testRunner.Then("I should see \"List of Site\'s Tenants\"");
testRunner.Then("I should see \"List of Site&#39;s Tenants\"");
#line 11
testRunner.And("I should see \"<span class=\"tenantName\">Default</span>\"");
#line 12
@@ -229,7 +229,7 @@ testRunner.When("I go to \"Admin/MultiTenancy/Add\"");
"scott.example.org"});
table4.AddRow(new string[] {
"DataProvider",
"SQLite"});
"SqlCe"});
#line 63
testRunner.And("I fill in", ((string)(null)), table4);
#line 68
@@ -243,7 +243,7 @@ testRunner.Then("I should see \"Welcome to Orchard\"");
#line 72
testRunner.And("I should see \"Finish Setup\"");
#line 73
testRunner.And("I should not see \"SQLite\"");
testRunner.And("I should not see \"SQL Server Compact\"");
#line 74
testRunner.And("the status should be 200 OK");
#line hidden

View File

@@ -83,10 +83,9 @@
<Reference Include="System.Core">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Data.SQLite, Version=1.0.65.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=x86">
<Reference Include="System.Data.SqlServerCe, Version=3.5.1.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\lib\sqlite\System.Data.SQLite.DLL</HintPath>
<Private>True</Private>
<HintPath>..\..\lib\sqlce\System.Data.SqlServerCe.dll</HintPath>
</Reference>
<Reference Include="System.Web" />
<Reference Include="System.Web.Abstractions">
@@ -181,7 +180,16 @@
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
<Target Name="CopySqlCeBinaries">
<ItemGroup>
<SqlCeBinariesx86 Include="$(ProjectDir)..\..\lib\sqlce\x86\*.*" />
<SqlCeBinariesx64 Include="$(ProjectDir)..\..\lib\sqlce\amd64\*.*" />
</ItemGroup>
<Copy SourceFiles="@(SqlCeBinariesx86)" DestinationFolder="$(ProjectDir)$(OutputPath)x86" SkipUnchangedFiles="true" />
<Copy SourceFiles="@(SqlCeBinariesx64)" DestinationFolder="$(ProjectDir)$(OutputPath)amd64" SkipUnchangedFiles="true" />
</Target>
<Target Name="AfterBuild">
<CallTarget Targets="CopySqlCeBinaries" />
</Target>
</Project>

View File

@@ -50,19 +50,19 @@ namespace Orchard.Tests.Data.Builders {
[Test]
public void SQLiteSchemaShouldBeGeneratedAndUsable() {
public void SqlCeSchemaShouldBeGeneratedAndUsable() {
var recordDescriptors = new[] {
new RecordBlueprint {TableName = "Hello", Type = typeof (FooRecord)}
};
var manager = (IDataServicesProviderFactory) new DataServicesProviderFactory(new[] {
new Meta<CreateDataServicesProvider>(
(dataFolder, connectionString) => new SQLiteDataServicesProvider(dataFolder, connectionString),
new Dictionary<string, object> {{"ProviderName", "SQLite"}})
(dataFolder, connectionString) => new SqlCeDataServicesProvider(dataFolder, connectionString),
new Dictionary<string, object> {{"ProviderName", "SqlCe"}})
});
var parameters = new SessionFactoryParameters {
Provider = "SQLite",
Provider = "SqlCe",
DataFolder = _tempDataFolder,
RecordDescriptors = recordDescriptors
};

View File

@@ -26,13 +26,13 @@ namespace Orchard.Tests.DataMigration {
var builder = new ContainerBuilder();
builder.RegisterInstance(new ShellSettings { DataTablePrefix = "TEST_", DataProvider = "SQLite" });
builder.RegisterInstance(new ShellSettings { DataTablePrefix = "TEST_", DataProvider = "SqlCe" });
var session = _sessionFactory.OpenSession();
builder.RegisterType<DefaultDataMigrationInterpreter>().As<IDataMigrationInterpreter>();
builder.RegisterInstance(new DefaultContentManagerTests.TestSessionLocator(session)).As<ISessionLocator>();
builder.RegisterInstance(new ShellSettings { DataProvider = "SQLite", DataTablePrefix = "TEST_" }).As<ShellSettings>();
builder.RegisterType<SqLiteCommandInterpreter>().As<ICommandInterpreter>();
builder.RegisterInstance(new ShellSettings { DataProvider = "SqlCe", DataTablePrefix = "TEST_" }).As<ShellSettings>();
builder.RegisterType<SqlCeCommandInterpreter>().As<ICommandInterpreter>();
_container = builder.Build();
_interpreter = _container.Resolve<IDataMigrationInterpreter>() as DefaultDataMigrationInterpreter;
@@ -65,7 +65,7 @@ namespace Orchard.Tests.DataMigration {
.DropIndex("IDX_XYZ"))
.DropForeignKey("Address", "User_Address")
.DropTable("Address")
.ExecuteSql("drop database", statement => statement.ForProvider("SQLite"))
.ExecuteSql("drop database", statement => statement.ForProvider("SqlCe"))
.ExecuteSql("DROP DATABASE", statement => statement.ForProvider("SQLServer"));
}

View File

@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using FluentNHibernate.Automapping;
using FluentNHibernate.Automapping.Alterations;
@@ -19,12 +20,21 @@ namespace Orchard.Tests {
//var persistenceModel = AutoMap.Source(new Types(types))
// .Alterations(alt => AddAlterations(alt, types))
// .Conventions.AddFromAssemblyOf<DataModule>();
var persistenceModel = AbstractDataServicesProvider.CreatePersistenceModel(types.Select(t => new RecordBlueprint { TableName = "Test_" + t.Name,Type = t }));
var persistenceModel = AbstractDataServicesProvider.CreatePersistenceModel(types.Select(t => new RecordBlueprint { TableName = "Test_" + t.Name, Type = t }));
var persistenceConfigurer = new SqlCeDataServicesProvider(fileName).GetPersistenceConfigurer(true/*createDatabase*/);
((MsSqlCeConfiguration)persistenceConfigurer).ShowSql();
return Fluently.Configure()
.Database(SQLiteConfiguration.Standard.UsingFile(fileName).ShowSql())
.Database(persistenceConfigurer)
.Mappings(m => m.AutoMappings.Add(persistenceModel))
.ExposeConfiguration(c => new SchemaExport(c).Create(false /*script*/, true /*export*/))
.ExposeConfiguration(c => {
// This is to work around what looks to be an issue in the NHibernate driver:
// When inserting a row with IDENTITY column, the "SELET @@IDENTITY" statement
// is issued as a separate command. By default, it is also issued in a separate
// connection, which is not supported (returns NULL).
c.SetProperty("connection.release_mode", "on_close");
new SchemaExport(c).Create(false /*script*/, true /*export*/);
})
.BuildSessionFactory();
}

View File

@@ -21,13 +21,13 @@ namespace Orchard.Tests.Environment.Configuration {
[Test]
public void SingleSettingsFileShouldComeBackAsExpected() {
_appDataFolder.CreateFile("Sites\\Default\\Settings.txt", "Name: Default\r\nDataProvider: SQLite\r\nDataConnectionString: something else");
_appDataFolder.CreateFile("Sites\\Default\\Settings.txt", "Name: Default\r\nDataProvider: SqlCe\r\nDataConnectionString: something else");
IShellSettingsManager loader = new ShellSettingsManager(_appDataFolder, new Mock<IShellSettingsManagerEventHandler>().Object);
var settings = loader.LoadSettings().Single();
Assert.That(settings, Is.Not.Null);
Assert.That(settings.Name, Is.EqualTo("Default"));
Assert.That(settings.DataProvider, Is.EqualTo("SQLite"));
Assert.That(settings.DataProvider, Is.EqualTo("SqlCe"));
Assert.That(settings.DataConnectionString, Is.EqualTo("something else"));
}
@@ -35,8 +35,8 @@ namespace Orchard.Tests.Environment.Configuration {
[Test]
public void MultipleFilesCanBeDetected() {
_appDataFolder.CreateFile("Sites\\Default\\Settings.txt", "Name: Default\r\nDataProvider: SQLite\r\nDataConnectionString: something else");
_appDataFolder.CreateFile("Sites\\Another\\Settings.txt", "Name: Another\r\nDataProvider: SQLite2\r\nDataConnectionString: something else2");
_appDataFolder.CreateFile("Sites\\Default\\Settings.txt", "Name: Default\r\nDataProvider: SqlCe\r\nDataConnectionString: something else");
_appDataFolder.CreateFile("Sites\\Another\\Settings.txt", "Name: Another\r\nDataProvider: SqlCe2\r\nDataConnectionString: something else2");
IShellSettingsManager loader = new ShellSettingsManager(_appDataFolder, new Mock<IShellSettingsManagerEventHandler>().Object);
var settings = loader.LoadSettings();
@@ -44,18 +44,18 @@ namespace Orchard.Tests.Environment.Configuration {
var def = settings.Single(x => x.Name == "Default");
Assert.That(def.Name, Is.EqualTo("Default"));
Assert.That(def.DataProvider, Is.EqualTo("SQLite"));
Assert.That(def.DataProvider, Is.EqualTo("SqlCe"));
Assert.That(def.DataConnectionString, Is.EqualTo("something else"));
var alt = settings.Single(x => x.Name == "Another");
Assert.That(alt.Name, Is.EqualTo("Another"));
Assert.That(alt.DataProvider, Is.EqualTo("SQLite2"));
Assert.That(alt.DataProvider, Is.EqualTo("SqlCe2"));
Assert.That(alt.DataConnectionString, Is.EqualTo("something else2"));
}
[Test]
public void NewSettingsCanBeStored() {
_appDataFolder.CreateFile("Sites\\Default\\Settings.txt", "Name: Default\r\nDataProvider: SQLite\r\nDataConnectionString: something else");
_appDataFolder.CreateFile("Sites\\Default\\Settings.txt", "Name: Default\r\nDataProvider: SqlCe\r\nDataConnectionString: something else");
IShellSettingsManager loader = new ShellSettingsManager(_appDataFolder, new Mock<IShellSettingsManagerEventHandler>().Object);
var foo = new ShellSettings { Name = "Foo", DataProvider = "Bar", DataConnectionString = "Quux" };

View File

@@ -1,6 +1,7 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using FluentNHibernate.Automapping;
using FluentNHibernate.Cfg;
@@ -9,6 +10,7 @@ using NHibernate;
using NHibernate.Criterion;
using NHibernate.Tool.hbm2ddl;
using NUnit.Framework;
using Orchard.Data.Providers;
using Orchard.Tests.Records;
namespace Orchard.Tests {
@@ -32,17 +34,28 @@ namespace Orchard.Tests {
[Test]
public void CreatingSchemaForStatedClassesInTempFile() {
var types = new Types(typeof (FooRecord), typeof (BarRecord));
var types = new Types(typeof(FooRecord), typeof(BarRecord));
var fileName = "temp.sdf";
var persistenceConfigurer = new SqlCeDataServicesProvider(fileName).GetPersistenceConfigurer(true/*createDatabase*/);
((MsSqlCeConfiguration)persistenceConfigurer).ShowSql();
var sessionFactory = Fluently.Configure()
.Database(SQLiteConfiguration.Standard.UsingFile("temp"))
.Database(persistenceConfigurer)
.Mappings(m => m.AutoMappings.Add(AutoMap.Source(types)))
.ExposeConfiguration(c => new SchemaExport(c).Create(false, true))
.ExposeConfiguration(c => {
// This is to work around what looks to be an issue in the NHibernate driver:
// When inserting a row with IDENTITY column, the "SELET @@IDENTITY" statement
// is issued as a separate command. By default, it is also issued in a separate
// connection, which is not supported (returns NULL).
c.SetProperty("connection.release_mode", "on_close");
new SchemaExport(c).Create(false, true);
})
.BuildSessionFactory();
var session = sessionFactory.OpenSession();
session.Save(new FooRecord {Name = "Hello"});
session.Save(new BarRecord {Height = 3, Width = 4.5m});
session.Save(new FooRecord { Name = "Hello" });
session.Save(new BarRecord { Height = 3, Width = 4.5m });
session.Close();
session = sessionFactory.OpenSession();
@@ -52,22 +65,13 @@ namespace Orchard.Tests {
session.Close();
}
[Test]
public void InMemorySQLiteCanBeUsedInSessionFactory() {
var sessionFactory = Fluently.Configure()
.Database(SQLiteConfiguration.Standard.InMemory())
.BuildSessionFactory();
var session = sessionFactory.OpenSession();
session.Close();
}
[Test]
public void UsingDataUtilityToBuildSessionFactory() {
var factory = DataUtility.CreateSessionFactory(typeof (FooRecord), typeof (BarRecord));
var factory = DataUtility.CreateSessionFactory(typeof(FooRecord), typeof(BarRecord));
var session = factory.OpenSession();
var foo1 = new FooRecord {Name = "world"};
var foo1 = new FooRecord { Name = "world" };
session.Save(foo1);
session.Close();

View File

@@ -108,10 +108,9 @@
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Data" />
<Reference Include="System.Data.SQLite, Version=1.0.65.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=x86">
<Reference Include="System.Data.SqlServerCe, Version=3.5.1.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\lib\sqlite\System.Data.SQLite.DLL</HintPath>
<Private>True</Private>
<HintPath>..\..\lib\sqlce\System.Data.SqlServerCe.dll</HintPath>
</Reference>
<Reference Include="System.Runtime.Serialization">
<RequiredTargetFramework>3.0</RequiredTargetFramework>
@@ -294,7 +293,15 @@
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>
<Target Name="CopySqlCeBinaries">
<ItemGroup>
<SqlCeBinariesx86 Include="$(ProjectDir)..\..\lib\sqlce\x86\*.*" />
<SqlCeBinariesx64 Include="$(ProjectDir)..\..\lib\sqlce\amd64\*.*" />
</ItemGroup>
<Copy SourceFiles="@(SqlCeBinariesx86)" DestinationFolder="$(ProjectDir)$(OutputPath)x86" SkipUnchangedFiles="true" />
<Copy SourceFiles="@(SqlCeBinariesx64)" DestinationFolder="$(ProjectDir)$(OutputPath)amd64" SkipUnchangedFiles="true" />
</Target>
<Target Name="AfterBuild">
<CallTarget Targets="CopySqlCeBinaries" />
</Target></Project>

View File

@@ -22,8 +22,8 @@
<label for="tenantDatabaseOption" class="forcheckbox"><%: T("Allow the tenant to set up the database") %></label>
</div>
<div>
<%: Html.RadioButtonFor(svm => svm.DataProvider, "SQLite", new { id = "builtinDatabaseOption" })%>
<label for="builtinDatabaseOption" class="forcheckbox"><%: T("Use built-in data storage (SQLite)") %></label>
<%: Html.RadioButtonFor(svm => svm.DataProvider, "SqlCe", new { id = "builtinDatabaseOption" })%>
<label for="builtinDatabaseOption" class="forcheckbox"><%: T("Use built-in data storage (SQL Server Compact)") %></label>
</div>
<div>
<%: Html.RadioButtonFor(svm => svm.DataProvider, "SqlServer", new { id = "sqlDatabaseOption" })%>

View File

@@ -26,8 +26,8 @@
</div><%
} %>
<div>
<%: Html.RadioButtonFor(svm => svm.DataProvider, "SQLite", new { id = "builtinDatabaseOption" })%>
<label for="builtinDatabaseOption" class="forcheckbox"><%: T("Use built-in data storage (SQLite)") %></label>
<%: Html.RadioButtonFor(svm => svm.DataProvider, "SqlCe", new { id = "builtinDatabaseOption" })%>
<label for="builtinDatabaseOption" class="forcheckbox"><%: T("Use built-in data storage (SQL Server Compact)") %></label>
</div>
<div>
<%: Html.RadioButtonFor(svm => svm.DataProvider, "SqlServer", new { id = "sqlDatabaseOption" })%>

View File

@@ -32,7 +32,7 @@ namespace Orchard.Setup.Commands {
[OrchardSwitch]
public string EnabledFeatures { get; set; }
[CommandHelp("setup /SiteName:<siteName> /AdminUserName:<username> /AdminPassword:<password> /DatabaseProvider:<SQLite|SQLServer> " +
[CommandHelp("setup /SiteName:<siteName> /AdminUserName:<username> /AdminPassword:<password> /DatabaseProvider:<SqlCe|SQLServer> " +
"/DatabaseConnectionString:<connection_string> /DatabaseTablePrefix:<table_prefix> /EnabledFeatures:<feature1,feature2,...>" +
"\r\n\tRun first time setup for the site or for a given tenant")]
[CommandName("setup")]

View File

@@ -29,7 +29,7 @@ if (!Model.DatabaseIsPreconfigured) { %>
<%: Html.ValidationMessage("DatabaseOptions", "Unable to setup data storage") %>
<div>
<%: Html.RadioButtonFor(svm => svm.DatabaseOptions, true, new { id = "builtin" })%>
<label for="builtin" class="forcheckbox"><%: T("Use built-in data storage (SQLite)") %></label>
<label for="builtin" class="forcheckbox"><%: T("Use built-in data storage (SQL Server Compact)")%></label>
</div>
<div>
<%: Html.RadioButtonFor(svm => svm.DatabaseOptions, false, new { id = "sql" })%>

View File

@@ -65,11 +65,6 @@
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="System.Data.SQLite, Version=1.0.65.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=x86">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\lib\sqlite\System.Data.SQLite.DLL</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="System.Web.ApplicationServices" />
<Reference Include="System.Web.DynamicData" />
<Reference Include="System.Web.Entity" />
@@ -324,32 +319,19 @@
<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\*.*"/>
<SqlCeBinariesx86 Include="$(ProjectDir)..\..\lib\sqlce\x86\*.*" />
<SqlCeBinariesx64 Include="$(ProjectDir)..\..\lib\sqlce\amd64\*.*" />
</ItemGroup>
<Copy
SourceFiles="@(SqlCeBinariesx86)"
DestinationFolder="$(ProjectDir)\bin\x86"
SkipUnchangedFiles="true"
/>
<Copy
SourceFiles="@(SqlCeBinariesx64)"
DestinationFolder="$(ProjectDir)\bin\amd64"
SkipUnchangedFiles="true"
/>
<Copy SourceFiles="@(SqlCeBinariesx86)" DestinationFolder="$(ProjectDir)$(OutputPath)x86" SkipUnchangedFiles="true" />
<Copy SourceFiles="@(SqlCeBinariesx64)" DestinationFolder="$(ProjectDir)$(OutputPath)amd64" SkipUnchangedFiles="true" />
</Target>
<Target Name="AfterBuild" DependsOnTargets="AfterBuildCompiler">
<PropertyGroup>
<AreasManifestDir>$(ProjectDir)\..\Manifests</AreasManifestDir>
</PropertyGroup>
<CallTarget Targets="CopySqlCeBinaries"/>
<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

@@ -1,7 +1,7 @@
using Orchard.Data.Migration.Schema;
namespace Orchard.Data.Migration.Interpreters {
public class SqLiteCommandInterpreter :
public class SqlCeCommandInterpreter :
ICommandInterpreter<DropColumnCommand>,
ICommandInterpreter<AlterColumnCommand>,
ICommandInterpreter<CreateForeignKeyCommand>,
@@ -34,7 +34,7 @@ namespace Orchard.Data.Migration.Interpreters {
}
public string DataProvider {
get { return "SQLite"; }
get { return "SqlCe"; }
}
}
}

View File

@@ -1,39 +0,0 @@
using System.IO;
using FluentNHibernate.Cfg.Db;
namespace Orchard.Data.Providers {
public class SQLiteDataServicesProvider : AbstractDataServicesProvider {
private readonly string _dataFolder;
private readonly string _connectionString;
public SQLiteDataServicesProvider(string dataFolder, string connectionString) {
_dataFolder = dataFolder;
_connectionString = connectionString;
}
public static string ProviderName {
get { return "SQLite"; }
}
public override IPersistenceConfigurer GetPersistenceConfigurer(bool createDatabase) {
var persistence = SQLiteConfiguration.Standard;
if (string.IsNullOrEmpty(_connectionString)) {
var dataFile = Path.Combine(_dataFolder, "Orchard.db");
if (!Directory.Exists(_dataFolder)) {
Directory.CreateDirectory(_dataFolder);
}
if (createDatabase && File.Exists(dataFile)) {
File.Delete(dataFile);
}
persistence = persistence.UsingFile(dataFile);
}
else {
persistence = persistence.ConnectionString(_connectionString);
}
return persistence;
}
}
}

View File

@@ -4,12 +4,19 @@ using FluentNHibernate.Cfg.Db;
namespace Orchard.Data.Providers {
public class SqlCeDataServicesProvider : AbstractDataServicesProvider {
private readonly string _fileName;
private readonly string _dataFolder;
private readonly string _connectionString;
public SqlCeDataServicesProvider(string dataFolder, string connectionString) {
_dataFolder = dataFolder;
_connectionString = connectionString;
_fileName = Path.Combine(_dataFolder, "Orchard.sdf");
}
public SqlCeDataServicesProvider(string fileName) {
_dataFolder = Path.GetDirectoryName(fileName);
_fileName = fileName;
}
public static string ProviderName {
@@ -19,36 +26,31 @@ namespace Orchard.Data.Providers {
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.Delete(_fileName);
}
if (createDatabase && File.Exists(dataFile)) {
File.Delete(dataFile);
}
string localConnectionString = string.Format("Data Source={0}", dataFile);
if (!File.Exists(dataFile)) {
string localConnectionString = string.Format("Data Source={0}", _fileName);
if (!File.Exists(_fileName)) {
CreateSqlCeDatabaseFile(localConnectionString);
}
persistence = persistence.ConnectionString(localConnectionString);
}
else {
persistence = persistence.ConnectionString(_connectionString);
}
return persistence;
}
private void CreateSqlCeDatabaseFile(string connectionString) {
if (!string.IsNullOrEmpty(_dataFolder))
Directory.CreateDirectory(_dataFolder);
// 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");
const string assemblyName = "System.Data.SqlServerCe, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL";
const string typeName = "System.Data.SqlServerCe.SqlCeEngine";
var sqlceEngineHandle = Activator.CreateInstance(assemblyName, typeName);
var engine = sqlceEngineHandle.Unwrap();
//engine.LocalConnectionString = connectionString;

View File

@@ -11,7 +11,6 @@ namespace Orchard.Data.Providers {
_connectionString = connectionString;
}
public static string ProviderName {
get { return "SqlServer"; }
}

View File

@@ -364,7 +364,7 @@
<Compile Include="Data\Migration\Interpreters\ICommandInterpreter.cs" />
<Compile Include="Data\Migration\Interpreters\DefaultDataMigrationInterpreter.cs" />
<Compile Include="Data\Migration\Interpreters\IDataMigrationInterpreter.cs" />
<Compile Include="Data\Migration\Interpreters\SqLiteCommandInterpreter.cs" />
<Compile Include="Data\Migration\Interpreters\SqlCeCommandInterpreter.cs" />
<Compile Include="Data\Migration\Interpreters\StringCommandInterpreter.cs" />
<Compile Include="Data\Migration\Schema\AddColumnCommand.cs" />
<Compile Include="Data\Migration\Schema\ISchemaBuilderCommand.cs" />
@@ -531,7 +531,6 @@
<Compile Include="Data\Providers\AbstractDataServicesProvider.cs" />
<Compile Include="Data\Providers\DataServicesProviderFactory.cs" />
<Compile Include="Data\Providers\IDataServicesProviderFactory.cs" />
<Compile Include="Data\Providers\SQLiteDataServicesProvider.cs" />
<Compile Include="Data\Providers\SqlServerDataServicesProvider.cs" />
<Compile Include="Data\Conventions\StringLengthConvention.cs" />
<Compile Include="Data\SessionFactoryHolder.cs" />

View File

@@ -54,11 +54,6 @@
<Reference Include="System.Data.DataSetExtensions">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Data.SQLite, Version=1.0.65.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=x86">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\lib\sqlite\System.Data.SQLite.DLL</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\lib\aspnetmvc\System.Web.Mvc.dll</HintPath>