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"> <Reference Include="System.Core">
<RequiredTargetFramework>3.5</RequiredTargetFramework> <RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference> </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> <SpecificVersion>False</SpecificVersion>
<HintPath>..\..\lib\sqlite\System.Data.SQLite.DLL</HintPath> <HintPath>..\..\lib\sqlce\System.Data.SqlServerCe.dll</HintPath>
<Private>True</Private>
</Reference> </Reference>
<Reference Include="System.Web" /> <Reference Include="System.Web" />
<Reference Include="System.Web.Abstractions"> <Reference Include="System.Web.Abstractions">
@@ -149,7 +148,16 @@
Other similar extension points exist, see Microsoft.Common.targets. Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild"> <Target Name="BeforeBuild">
</Target> </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> </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 add profiling data
feature disable Orchard.DevTools feature disable Orchard.DevTools

View File

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

View File

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

View File

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

View File

@@ -83,10 +83,9 @@
<Reference Include="System.Core"> <Reference Include="System.Core">
<RequiredTargetFramework>3.5</RequiredTargetFramework> <RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference> </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> <SpecificVersion>False</SpecificVersion>
<HintPath>..\..\lib\sqlite\System.Data.SQLite.DLL</HintPath> <HintPath>..\..\lib\sqlce\System.Data.SqlServerCe.dll</HintPath>
<Private>True</Private>
</Reference> </Reference>
<Reference Include="System.Web" /> <Reference Include="System.Web" />
<Reference Include="System.Web.Abstractions"> <Reference Include="System.Web.Abstractions">
@@ -181,7 +180,16 @@
Other similar extension points exist, see Microsoft.Common.targets. Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild"> <Target Name="BeforeBuild">
</Target> </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> </Project>

View File

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

View File

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

View File

@@ -1,5 +1,6 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO;
using System.Linq; using System.Linq;
using FluentNHibernate.Automapping; using FluentNHibernate.Automapping;
using FluentNHibernate.Automapping.Alterations; using FluentNHibernate.Automapping.Alterations;
@@ -19,12 +20,21 @@ namespace Orchard.Tests {
//var persistenceModel = AutoMap.Source(new Types(types)) //var persistenceModel = AutoMap.Source(new Types(types))
// .Alterations(alt => AddAlterations(alt, types)) // .Alterations(alt => AddAlterations(alt, types))
// .Conventions.AddFromAssemblyOf<DataModule>(); // .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() return Fluently.Configure()
.Database(SQLiteConfiguration.Standard.UsingFile(fileName).ShowSql()) .Database(persistenceConfigurer)
.Mappings(m => m.AutoMappings.Add(persistenceModel)) .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(); .BuildSessionFactory();
} }

View File

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

View File

@@ -1,6 +1,7 @@
using System; using System;
using System.Collections; using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO;
using System.Linq; using System.Linq;
using FluentNHibernate.Automapping; using FluentNHibernate.Automapping;
using FluentNHibernate.Cfg; using FluentNHibernate.Cfg;
@@ -9,6 +10,7 @@ using NHibernate;
using NHibernate.Criterion; using NHibernate.Criterion;
using NHibernate.Tool.hbm2ddl; using NHibernate.Tool.hbm2ddl;
using NUnit.Framework; using NUnit.Framework;
using Orchard.Data.Providers;
using Orchard.Tests.Records; using Orchard.Tests.Records;
namespace Orchard.Tests { namespace Orchard.Tests {
@@ -32,17 +34,28 @@ namespace Orchard.Tests {
[Test] [Test]
public void CreatingSchemaForStatedClassesInTempFile() { 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() var sessionFactory = Fluently.Configure()
.Database(SQLiteConfiguration.Standard.UsingFile("temp")) .Database(persistenceConfigurer)
.Mappings(m => m.AutoMappings.Add(AutoMap.Source(types))) .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(); .BuildSessionFactory();
var session = sessionFactory.OpenSession(); var session = sessionFactory.OpenSession();
session.Save(new FooRecord {Name = "Hello"}); session.Save(new FooRecord { Name = "Hello" });
session.Save(new BarRecord {Height = 3, Width = 4.5m}); session.Save(new BarRecord { Height = 3, Width = 4.5m });
session.Close(); session.Close();
session = sessionFactory.OpenSession(); session = sessionFactory.OpenSession();
@@ -52,22 +65,13 @@ namespace Orchard.Tests {
session.Close(); session.Close();
} }
[Test]
public void InMemorySQLiteCanBeUsedInSessionFactory() {
var sessionFactory = Fluently.Configure()
.Database(SQLiteConfiguration.Standard.InMemory())
.BuildSessionFactory();
var session = sessionFactory.OpenSession();
session.Close();
}
[Test] [Test]
public void UsingDataUtilityToBuildSessionFactory() { public void UsingDataUtilityToBuildSessionFactory() {
var factory = DataUtility.CreateSessionFactory(typeof (FooRecord), typeof (BarRecord)); var factory = DataUtility.CreateSessionFactory(typeof(FooRecord), typeof(BarRecord));
var session = factory.OpenSession(); var session = factory.OpenSession();
var foo1 = new FooRecord {Name = "world"}; var foo1 = new FooRecord { Name = "world" };
session.Save(foo1); session.Save(foo1);
session.Close(); session.Close();

View File

@@ -108,10 +108,9 @@
<RequiredTargetFramework>3.5</RequiredTargetFramework> <RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference> </Reference>
<Reference Include="System.Data" /> <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> <SpecificVersion>False</SpecificVersion>
<HintPath>..\..\lib\sqlite\System.Data.SQLite.DLL</HintPath> <HintPath>..\..\lib\sqlce\System.Data.SqlServerCe.dll</HintPath>
<Private>True</Private>
</Reference> </Reference>
<Reference Include="System.Runtime.Serialization"> <Reference Include="System.Runtime.Serialization">
<RequiredTargetFramework>3.0</RequiredTargetFramework> <RequiredTargetFramework>3.0</RequiredTargetFramework>
@@ -294,7 +293,15 @@
Other similar extension points exist, see Microsoft.Common.targets. Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild"> <Target Name="BeforeBuild">
</Target> </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> <label for="tenantDatabaseOption" class="forcheckbox"><%: T("Allow the tenant to set up the database") %></label>
</div> </div>
<div> <div>
<%: Html.RadioButtonFor(svm => svm.DataProvider, "SQLite", new { id = "builtinDatabaseOption" })%> <%: Html.RadioButtonFor(svm => svm.DataProvider, "SqlCe", new { id = "builtinDatabaseOption" })%>
<label for="builtinDatabaseOption" class="forcheckbox"><%: T("Use built-in data storage (SQLite)") %></label> <label for="builtinDatabaseOption" class="forcheckbox"><%: T("Use built-in data storage (SQL Server Compact)") %></label>
</div> </div>
<div> <div>
<%: Html.RadioButtonFor(svm => svm.DataProvider, "SqlServer", new { id = "sqlDatabaseOption" })%> <%: Html.RadioButtonFor(svm => svm.DataProvider, "SqlServer", new { id = "sqlDatabaseOption" })%>

View File

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

View File

@@ -32,7 +32,7 @@ namespace Orchard.Setup.Commands {
[OrchardSwitch] [OrchardSwitch]
public string EnabledFeatures { get; set; } 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,...>" + "/DatabaseConnectionString:<connection_string> /DatabaseTablePrefix:<table_prefix> /EnabledFeatures:<feature1,feature2,...>" +
"\r\n\tRun first time setup for the site or for a given tenant")] "\r\n\tRun first time setup for the site or for a given tenant")]
[CommandName("setup")] [CommandName("setup")]

View File

@@ -29,7 +29,7 @@ if (!Model.DatabaseIsPreconfigured) { %>
<%: Html.ValidationMessage("DatabaseOptions", "Unable to setup data storage") %> <%: Html.ValidationMessage("DatabaseOptions", "Unable to setup data storage") %>
<div> <div>
<%: Html.RadioButtonFor(svm => svm.DatabaseOptions, true, new { id = "builtin" })%> <%: 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>
<div> <div>
<%: Html.RadioButtonFor(svm => svm.DatabaseOptions, false, new { id = "sql" })%> <%: Html.RadioButtonFor(svm => svm.DatabaseOptions, false, new { id = "sql" })%>

View File

@@ -65,11 +65,6 @@
<RequiredTargetFramework>3.5</RequiredTargetFramework> <RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference> </Reference>
<Reference Include="System.Data.DataSetExtensions" /> <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.ApplicationServices" />
<Reference Include="System.Web.DynamicData" /> <Reference Include="System.Web.DynamicData" />
<Reference Include="System.Web.Entity" /> <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.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" /> <UsingTask TaskName="Microsoft.Web.Mvc.Build.CopyAreaManifests" AssemblyName="Microsoft.Web.Mvc.Build, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
--> -->
<Target Name="CopySqlCeBinaries"> <Target Name="CopySqlCeBinaries">
<ItemGroup> <ItemGroup>
<SqlCeBinariesx86 Include="..\..\lib\sqlce\x86\*.*"/> <SqlCeBinariesx86 Include="$(ProjectDir)..\..\lib\sqlce\x86\*.*" />
<SqlCeBinariesx64 Include="..\..\lib\sqlce\amd64\*.*"/> <SqlCeBinariesx64 Include="$(ProjectDir)..\..\lib\sqlce\amd64\*.*" />
</ItemGroup> </ItemGroup>
<Copy SourceFiles="@(SqlCeBinariesx86)" DestinationFolder="$(ProjectDir)$(OutputPath)x86" SkipUnchangedFiles="true" />
<Copy <Copy SourceFiles="@(SqlCeBinariesx64)" DestinationFolder="$(ProjectDir)$(OutputPath)amd64" SkipUnchangedFiles="true" />
SourceFiles="@(SqlCeBinariesx86)"
DestinationFolder="$(ProjectDir)\bin\x86"
SkipUnchangedFiles="true"
/>
<Copy
SourceFiles="@(SqlCeBinariesx64)"
DestinationFolder="$(ProjectDir)\bin\amd64"
SkipUnchangedFiles="true"
/>
</Target> </Target>
<Target Name="AfterBuild" DependsOnTargets="AfterBuildCompiler"> <Target Name="AfterBuild" DependsOnTargets="AfterBuildCompiler">
<PropertyGroup> <PropertyGroup>
<AreasManifestDir>$(ProjectDir)\..\Manifests</AreasManifestDir> <AreasManifestDir>$(ProjectDir)\..\Manifests</AreasManifestDir>
</PropertyGroup> </PropertyGroup>
<CallTarget Targets="CopySqlCeBinaries"/> <CallTarget Targets="CopySqlCeBinaries" />
<!-- If this is an area child project, uncomment the following line: <!-- If this is an area child project, uncomment the following line:
<CreateAreaManifest AreaName="$(AssemblyName)" AreaType="Child" AreaPath="$(ProjectDir)" ManifestPath="$(AreasManifestDir)" ContentFiles="@(Content)" /> <CreateAreaManifest AreaName="$(AssemblyName)" AreaType="Child" AreaPath="$(ProjectDir)" ManifestPath="$(AreasManifestDir)" ContentFiles="@(Content)" />
--> -->

View File

@@ -1,7 +1,7 @@
using Orchard.Data.Migration.Schema; using Orchard.Data.Migration.Schema;
namespace Orchard.Data.Migration.Interpreters { namespace Orchard.Data.Migration.Interpreters {
public class SqLiteCommandInterpreter : public class SqlCeCommandInterpreter :
ICommandInterpreter<DropColumnCommand>, ICommandInterpreter<DropColumnCommand>,
ICommandInterpreter<AlterColumnCommand>, ICommandInterpreter<AlterColumnCommand>,
ICommandInterpreter<CreateForeignKeyCommand>, ICommandInterpreter<CreateForeignKeyCommand>,
@@ -34,7 +34,7 @@ namespace Orchard.Data.Migration.Interpreters {
} }
public string DataProvider { 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 { namespace Orchard.Data.Providers {
public class SqlCeDataServicesProvider : AbstractDataServicesProvider { public class SqlCeDataServicesProvider : AbstractDataServicesProvider {
private readonly string _fileName;
private readonly string _dataFolder; private readonly string _dataFolder;
private readonly string _connectionString; private readonly string _connectionString;
public SqlCeDataServicesProvider(string dataFolder, string connectionString) { public SqlCeDataServicesProvider(string dataFolder, string connectionString) {
_dataFolder = dataFolder; _dataFolder = dataFolder;
_connectionString = connectionString; _connectionString = connectionString;
_fileName = Path.Combine(_dataFolder, "Orchard.sdf");
}
public SqlCeDataServicesProvider(string fileName) {
_dataFolder = Path.GetDirectoryName(fileName);
_fileName = fileName;
} }
public static string ProviderName { public static string ProviderName {
@@ -19,36 +26,31 @@ namespace Orchard.Data.Providers {
public override IPersistenceConfigurer GetPersistenceConfigurer(bool createDatabase) { public override IPersistenceConfigurer GetPersistenceConfigurer(bool createDatabase) {
var persistence = MsSqlCeConfiguration.Standard; var persistence = MsSqlCeConfiguration.Standard;
if (string.IsNullOrEmpty(_connectionString)) { if (createDatabase) {
var dataFile = Path.Combine(_dataFolder, "Orchard.sdf"); File.Delete(_fileName);
if (!Directory.Exists(_dataFolder)) {
Directory.CreateDirectory(_dataFolder);
} }
if (createDatabase && File.Exists(dataFile)) { string localConnectionString = string.Format("Data Source={0}", _fileName);
File.Delete(dataFile); if (!File.Exists(_fileName)) {
}
string localConnectionString = string.Format("Data Source={0}", dataFile);
if (!File.Exists(dataFile)) {
CreateSqlCeDatabaseFile(localConnectionString); CreateSqlCeDatabaseFile(localConnectionString);
} }
persistence = persistence.ConnectionString(localConnectionString); persistence = persistence.ConnectionString(localConnectionString);
}
else {
persistence = persistence.ConnectionString(_connectionString);
}
return persistence; return persistence;
} }
private void CreateSqlCeDatabaseFile(string connectionString) { 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 // We want to execute this code using Reflection, to avoid having a binary
// dependency on SqlCe assembly // dependency on SqlCe assembly
//engine engine = new SqlCeEngine(); //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(); var engine = sqlceEngineHandle.Unwrap();
//engine.LocalConnectionString = connectionString; //engine.LocalConnectionString = connectionString;

View File

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

View File

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

View File

@@ -54,11 +54,6 @@
<Reference Include="System.Data.DataSetExtensions"> <Reference Include="System.Data.DataSetExtensions">
<RequiredTargetFramework>3.5</RequiredTargetFramework> <RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference> </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"> <Reference Include="System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion> <SpecificVersion>False</SpecificVersion>
<HintPath>..\..\lib\aspnetmvc\System.Web.Mvc.dll</HintPath> <HintPath>..\..\lib\aspnetmvc\System.Web.Mvc.dll</HintPath>