mirror of
https://github.com/Sonarr/Sonarr.git
synced 2024-12-14 11:23:42 +02:00
added Marr.Data.Mapping
This commit is contained in:
parent
4bb4faf626
commit
6dd56114e3
BIN
Libraries/Sqlite/Mono.Data.Sqlite.dll
Normal file
BIN
Libraries/Sqlite/Mono.Data.Sqlite.dll
Normal file
Binary file not shown.
@ -3,14 +3,14 @@
|
||||
using System.Linq;
|
||||
using FizzWare.NBuilder;
|
||||
using FluentAssertions;
|
||||
using Marr.Data.Mapping;
|
||||
using NUnit.Framework;
|
||||
using NzbDrone.Core.Datastore;
|
||||
using NzbDrone.Core.Test.Framework;
|
||||
using ServiceStack.OrmLite;
|
||||
|
||||
namespace NzbDrone.Core.Test.Datastore
|
||||
{
|
||||
public class BaiscType : ModelBase
|
||||
public class BasicType : ModelBase
|
||||
{
|
||||
public string Name { get; set; }
|
||||
public string Tilte { get; set; }
|
||||
@ -18,26 +18,33 @@ public class BaiscType : ModelBase
|
||||
}
|
||||
|
||||
[TestFixture]
|
||||
public class BasicRepositoryFixture : DbTest<BasicRepository<BaiscType>,BaiscType>
|
||||
public class
|
||||
BasicRepositoryFixture : DbTest<BasicRepository<BasicType>, BasicType>
|
||||
{
|
||||
private BaiscType _baiscType;
|
||||
private BasicType _basicType;
|
||||
|
||||
|
||||
[SetUp]
|
||||
public void Setup()
|
||||
{
|
||||
_baiscType = Builder<BaiscType>
|
||||
_basicType = Builder<BasicType>
|
||||
.CreateNew()
|
||||
.With(c => c.Id = 0)
|
||||
.Build();
|
||||
|
||||
Mocker.Resolve<IDbConnection>().CreateTable<BaiscType>();
|
||||
var mapping = new FluentMappings(true);
|
||||
|
||||
mapping.Entity<BasicType>()
|
||||
.Columns.AutoMapSimpleTypeProperties()
|
||||
.For(c => c.Id).SetAutoIncrement()
|
||||
.SetPrimaryKey();
|
||||
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_be_able_to_add()
|
||||
{
|
||||
Subject.Insert(_baiscType);
|
||||
Subject.Insert(_basicType);
|
||||
Subject.All().Should().HaveCount(1);
|
||||
}
|
||||
|
||||
@ -46,21 +53,21 @@ public void should_be_able_to_add()
|
||||
[Test]
|
||||
public void should_be_able_to_delete_model()
|
||||
{
|
||||
Subject.Insert(_baiscType);
|
||||
Subject.Insert(_basicType);
|
||||
Subject.All().Should().HaveCount(1);
|
||||
|
||||
Subject.Delete(_baiscType.Id);
|
||||
Subject.Delete(_basicType.Id);
|
||||
Subject.All().Should().BeEmpty();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_be_able_to_find_by_id()
|
||||
{
|
||||
Subject.Insert(_baiscType);
|
||||
Subject.Get(_baiscType.Id)
|
||||
Subject.Insert(_basicType);
|
||||
Subject.Get(_basicType.Id)
|
||||
.ShouldHave()
|
||||
.AllProperties()
|
||||
.EqualTo(_baiscType);
|
||||
.EqualTo(_basicType);
|
||||
}
|
||||
|
||||
[Test]
|
||||
|
@ -7,32 +7,29 @@
|
||||
using NUnit.Framework;
|
||||
using NzbDrone.Core.Datastore;
|
||||
using NzbDrone.Core.Test.Framework;
|
||||
using ServiceStack.OrmLite;
|
||||
|
||||
namespace NzbDrone.Core.Test.Datastore
|
||||
{
|
||||
[TestFixture]
|
||||
public class ObjectDatabaseFixture : DbTest<BasicRepository<BaiscType>, BaiscType>
|
||||
public class ObjectDatabaseFixture : DbTest<BasicRepository<BasicType>, BasicType>
|
||||
{
|
||||
private BaiscType _sampleType;
|
||||
private BasicType _sampleType;
|
||||
|
||||
[SetUp]
|
||||
public void SetUp()
|
||||
{
|
||||
_sampleType = Builder<BaiscType>
|
||||
_sampleType = Builder<BasicType>
|
||||
.CreateNew()
|
||||
.With(s => s.Id = 0)
|
||||
.Build();
|
||||
|
||||
Mocker.Resolve<IDbConnection>().CreateTable<BaiscType>();
|
||||
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_be_able_to_write_to_database()
|
||||
{
|
||||
Subject.Insert(_sampleType);
|
||||
Db.All<BaiscType>().Should().HaveCount(1);
|
||||
Db.All<BasicType>().Should().HaveCount(1);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@ -52,7 +49,7 @@ public void update_item_with_root_index_0_should_faile()
|
||||
[Test]
|
||||
public void should_be_able_to_store_empty_list()
|
||||
{
|
||||
var series = new List<BaiscType>();
|
||||
var series = new List<BasicType>();
|
||||
|
||||
Subject.InsertMany(series);
|
||||
}
|
||||
@ -71,7 +68,7 @@ public void new_object_should_get_new_id()
|
||||
_sampleType.Id = 0;
|
||||
Subject.Insert(_sampleType);
|
||||
|
||||
Db.All<BaiscType>().Should().HaveCount(1);
|
||||
Db.All<BasicType>().Should().HaveCount(1);
|
||||
_sampleType.Id.Should().Be(1);
|
||||
}
|
||||
|
||||
@ -83,7 +80,7 @@ public void should_have_id_when_returned_from_database()
|
||||
{
|
||||
_sampleType.Id = 0;
|
||||
Subject.Insert(_sampleType);
|
||||
var item = Db.All<BaiscType>();
|
||||
var item = Db.All<BasicType>();
|
||||
|
||||
item.Should().HaveCount(1);
|
||||
item.First().Id.Should().NotBe(0);
|
||||
@ -95,7 +92,7 @@ public void should_have_id_when_returned_from_database()
|
||||
public void should_be_able_to_find_object_by_id()
|
||||
{
|
||||
Subject.Insert(_sampleType);
|
||||
var item = Db.All<BaiscType>().Single(c => c.Id == _sampleType.Id);
|
||||
var item = Db.All<BasicType>().Single(c => c.Id == _sampleType.Id);
|
||||
|
||||
item.Id.Should().NotBe(0);
|
||||
item.Id.Should().Be(_sampleType.Id);
|
||||
@ -105,7 +102,7 @@ public void should_be_able_to_find_object_by_id()
|
||||
[Test]
|
||||
public void update_field_should_only_update_that_filed()
|
||||
{
|
||||
var childModel = new BaiscType
|
||||
var childModel = new BasicType
|
||||
{
|
||||
Address = "Address",
|
||||
Name = "Name",
|
||||
@ -121,9 +118,9 @@ public void update_field_should_only_update_that_filed()
|
||||
|
||||
Subject.UpdateFields(childModel, t => t.Name);
|
||||
|
||||
Db.All<BaiscType>().Single().Address.Should().Be("Address");
|
||||
Db.All<BaiscType>().Single().Name.Should().Be("B");
|
||||
Db.All<BaiscType>().Single().Tilte.Should().Be("Title");
|
||||
Db.All<BasicType>().Single().Address.Should().Be("Address");
|
||||
Db.All<BasicType>().Single().Name.Should().Be("B");
|
||||
Db.All<BasicType>().Single().Tilte.Should().Be("Title");
|
||||
}
|
||||
|
||||
|
||||
|
@ -1,11 +1,12 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using Marr.Data;
|
||||
using NUnit.Framework;
|
||||
using NzbDrone.Common;
|
||||
using NzbDrone.Core.Datastore;
|
||||
using ServiceStack.OrmLite;
|
||||
|
||||
namespace NzbDrone.Core.Test.Framework
|
||||
{
|
||||
@ -61,8 +62,12 @@ protected TSubject Subject
|
||||
public abstract class DbTest : CoreTest
|
||||
{
|
||||
|
||||
private IDatabase _db;
|
||||
protected IDatabase Db
|
||||
private string _dbName;
|
||||
|
||||
private ITestDatabase _db;
|
||||
private IDatabase _database;
|
||||
|
||||
protected ITestDatabase Db
|
||||
{
|
||||
get
|
||||
{
|
||||
@ -75,10 +80,15 @@ protected IDatabase Db
|
||||
|
||||
private void WithObjectDb(bool memory = true)
|
||||
{
|
||||
|
||||
_dbName = DateTime.Now.Ticks.ToString() + ".db";
|
||||
|
||||
MapRepository.Instance.EnableTraceLogging = true;
|
||||
|
||||
var factory = new DbFactory();
|
||||
var dbConnection = factory.Create();
|
||||
_db = new TestDatabase(dbConnection);
|
||||
Mocker.SetConstant(dbConnection);
|
||||
_database = factory.Create(_dbName);
|
||||
_db = new TestTestDatabase(_database);
|
||||
Mocker.SetConstant(_database);
|
||||
}
|
||||
|
||||
[SetUp]
|
||||
@ -87,51 +97,68 @@ public void SetupReadDb()
|
||||
WithObjectDb();
|
||||
}
|
||||
|
||||
[TearDown]
|
||||
public void TearDown()
|
||||
{
|
||||
var files = Directory.GetFiles(Directory.GetCurrentDirectory(), "*.db");
|
||||
|
||||
foreach (var file in files)
|
||||
{
|
||||
try
|
||||
{
|
||||
File.Delete(file);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
public interface IDatabase
|
||||
public interface ITestDatabase
|
||||
{
|
||||
void InsertMany<T>(IEnumerable<T> items) where T : new();
|
||||
void Insert<T>(T item) where T : new();
|
||||
IEnumerable<T> All<T>() where T : new();
|
||||
void Update<T>(T childModel) where T : new();
|
||||
void Delete<T>(T childModel) where T : new();
|
||||
void InsertMany<T>(IEnumerable<T> items) where T : ModelBase, new();
|
||||
void Insert<T>(T item) where T : ModelBase, new();
|
||||
IEnumerable<T> All<T>() where T : ModelBase, new();
|
||||
void Update<T>(T childModel) where T : ModelBase, new();
|
||||
void Delete<T>(T childModel) where T : ModelBase, new();
|
||||
}
|
||||
|
||||
public class TestDatabase : IDatabase
|
||||
public class TestTestDatabase : ITestDatabase
|
||||
{
|
||||
private readonly IDbConnection _dbConnection;
|
||||
private readonly IDatabase _dbConnection;
|
||||
|
||||
public TestDatabase(IDbConnection dbConnection)
|
||||
public TestTestDatabase(IDatabase dbConnection)
|
||||
{
|
||||
_dbConnection = dbConnection;
|
||||
}
|
||||
|
||||
public void InsertMany<T>(IEnumerable<T> items) where T : new()
|
||||
public void InsertMany<T>(IEnumerable<T> items) where T : ModelBase, new()
|
||||
{
|
||||
_dbConnection.InsertAll(items);
|
||||
new BasicRepository<T>(_dbConnection).InsertMany(items.ToList());
|
||||
}
|
||||
|
||||
public void Insert<T>(T item) where T : new()
|
||||
public void Insert<T>(T item) where T : ModelBase, new()
|
||||
{
|
||||
_dbConnection.Insert(item);
|
||||
new BasicRepository<T>(_dbConnection).Insert(item);
|
||||
}
|
||||
|
||||
public IEnumerable<T> All<T>() where T : new()
|
||||
public IEnumerable<T> All<T>() where T : ModelBase, new()
|
||||
{
|
||||
return _dbConnection.Select<T>();
|
||||
return new BasicRepository<T>(_dbConnection).All();
|
||||
}
|
||||
|
||||
public void Update<T>(T childModel) where T : new()
|
||||
public void Update<T>(T childModel) where T : ModelBase, new()
|
||||
{
|
||||
_dbConnection.Update(childModel);
|
||||
new BasicRepository<T>(_dbConnection).Update(childModel);
|
||||
}
|
||||
|
||||
public void Delete<T>(T childModel) where T : new()
|
||||
public void Delete<T>(T childModel) where T : ModelBase, new()
|
||||
{
|
||||
_dbConnection.Delete(childModel);
|
||||
new BasicRepository<T>(_dbConnection).Delete(childModel);
|
||||
}
|
||||
}
|
||||
}
|
@ -77,6 +77,9 @@
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\packages\FluentAssertions.2.0.0.1\lib\net40\FluentAssertions.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Marr.Data">
|
||||
<HintPath>..\packages\MarrDataMapper.3.17.4747.34302\lib\Marr.Data.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
<Reference Include="Microsoft.Practices.ServiceLocation, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
@ -89,9 +92,6 @@
|
||||
<Reference Include="Microsoft.Practices.Unity.Configuration">
|
||||
<HintPath>..\packages\Unity.2.1.505.2\lib\NET35\Microsoft.Practices.Unity.Configuration.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Mono.Data.Sqlite">
|
||||
<HintPath>..\packages\ServiceStack.OrmLite.Sqlite.Mono.3.9.42\lib\net35\Mono.Data.Sqlite.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Moq, Version=4.0.10827.0, Culture=neutral, PublicKeyToken=69f491c39445e920, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Moq.4.0.10827\lib\NET40\Moq.dll</HintPath>
|
||||
</Reference>
|
||||
@ -114,26 +114,6 @@
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\packages\Prowlin.0.9.4456.26422\lib\net40\Prowlin.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="ServiceStack.Common, Version=3.9.42.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\packages\ServiceStack.Common.3.9.42\lib\net35\ServiceStack.Common.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="ServiceStack.Interfaces">
|
||||
<HintPath>..\packages\ServiceStack.Common.3.9.42\lib\net35\ServiceStack.Interfaces.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="ServiceStack.OrmLite">
|
||||
<HintPath>..\packages\ServiceStack.OrmLite.Sqlite.Mono.3.9.42\lib\net35\ServiceStack.OrmLite.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="ServiceStack.OrmLite.Sqlite">
|
||||
<HintPath>..\packages\ServiceStack.OrmLite.Sqlite.Mono.3.9.42\lib\net35\ServiceStack.OrmLite.Sqlite.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="ServiceStack.Text, Version=3.9.42.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\packages\ServiceStack.Text.3.9.42\lib\net35\ServiceStack.Text.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="SignalR, Version=0.5.1.10822, Culture=neutral, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\packages\SignalR.Server.0.5.3\lib\net40\SignalR.dll</HintPath>
|
||||
|
@ -11,9 +11,6 @@
|
||||
<package id="NLog" version="2.0.0.2000" />
|
||||
<package id="NUnit" version="2.6.2" targetFramework="net40" />
|
||||
<package id="Prowlin" version="0.9.4456.26422" targetFramework="net40" />
|
||||
<package id="ServiceStack.Common" version="3.9.42" targetFramework="net40" />
|
||||
<package id="ServiceStack.OrmLite.Sqlite.Mono" version="3.9.42" targetFramework="net40" />
|
||||
<package id="ServiceStack.Text" version="3.9.42" targetFramework="net40" />
|
||||
<package id="SignalR.Server" version="0.5.3" targetFramework="net40" />
|
||||
<package id="Unity" version="2.1.505.2" targetFramework="net40" />
|
||||
</packages>
|
@ -1,11 +1,9 @@
|
||||
using NzbDrone.Core.Datastore;
|
||||
using ServiceStack.DataAnnotations;
|
||||
|
||||
namespace NzbDrone.Core.Configuration
|
||||
{
|
||||
public class Config : ModelBase
|
||||
{
|
||||
[Index(Unique = true)]
|
||||
public string Key { get; set; }
|
||||
public string Value { get; set; }
|
||||
}
|
||||
|
@ -12,7 +12,7 @@ public interface IConfigRepository : IBasicRepository<Config>
|
||||
|
||||
public class ConfigRepository : BasicRepository<Config>, IConfigRepository
|
||||
{
|
||||
public ConfigRepository(IDbConnection database)
|
||||
public ConfigRepository(IDatabase database)
|
||||
: base(database)
|
||||
{
|
||||
}
|
||||
@ -20,7 +20,7 @@ public ConfigRepository(IDbConnection database)
|
||||
|
||||
public Config Get(string key)
|
||||
{
|
||||
return SingleOrDefault(c => c.Key == key);
|
||||
return Queryable().SingleOrDefault(c => c.Key == key);
|
||||
}
|
||||
|
||||
|
||||
|
@ -3,7 +3,9 @@
|
||||
using System.Data;
|
||||
using System.Linq;
|
||||
using System.Linq.Expressions;
|
||||
using ServiceStack.OrmLite;
|
||||
using Marr.Data;
|
||||
using Marr.Data.QGen;
|
||||
|
||||
|
||||
namespace NzbDrone.Core.Datastore
|
||||
{
|
||||
@ -11,12 +13,8 @@ namespace NzbDrone.Core.Datastore
|
||||
{
|
||||
IEnumerable<TModel> All();
|
||||
int Count();
|
||||
bool Any(Expression<Func<TModel, bool>> predicate);
|
||||
TModel Get(int id);
|
||||
TModel Single(Expression<Func<TModel, bool>> predicate);
|
||||
TModel SingleOrDefault();
|
||||
TModel SingleOrDefault(Expression<Func<TModel, bool>> predicate);
|
||||
List<TModel> Where(Expression<Func<TModel, bool>> predicate);
|
||||
TModel Insert(TModel model);
|
||||
TModel Update(TModel model);
|
||||
TModel Upsert(TModel model);
|
||||
@ -29,38 +27,39 @@ namespace NzbDrone.Core.Datastore
|
||||
bool HasItems();
|
||||
void DeleteMany(IEnumerable<int> ids);
|
||||
void UpdateFields<TKey>(TModel model, Expression<Func<TModel, TKey>> onlyFields);
|
||||
List<TModel> Where(SqlExpressionVisitor<TModel> expression);
|
||||
}
|
||||
|
||||
public class BasicRepository<TModel> : IBasicRepository<TModel> where TModel : ModelBase, new()
|
||||
{
|
||||
private readonly IDbConnection _database;
|
||||
private readonly IDataMapper _dataMapper;
|
||||
|
||||
public BasicRepository(IDbConnection database)
|
||||
public BasicRepository(IDatabase database)
|
||||
{
|
||||
_database = database;
|
||||
_dataMapper = database.DataMapper;
|
||||
}
|
||||
|
||||
protected QueryBuilder<TModel> Queryable()
|
||||
{
|
||||
return _dataMapper.Query<TModel>();
|
||||
}
|
||||
|
||||
public IEnumerable<TModel> All()
|
||||
{
|
||||
return _database.Select<TModel>();
|
||||
return _dataMapper.Query<TModel>().ToList();
|
||||
}
|
||||
|
||||
public int Count()
|
||||
{
|
||||
return (int)_database.Count<TModel>();
|
||||
}
|
||||
|
||||
public bool Any(Expression<Func<TModel, bool>> predicate)
|
||||
{
|
||||
return _database.Exists<TModel>(predicate);
|
||||
return _dataMapper.Query<TModel>().Count();
|
||||
}
|
||||
|
||||
public TModel Get(int id)
|
||||
{
|
||||
try
|
||||
{
|
||||
return _database.GetById<TModel>(id);
|
||||
var c = _dataMapper.Query<TModel>().FromTable(typeof(TModel).Name);
|
||||
|
||||
return null;
|
||||
}
|
||||
catch (ArgumentNullException e)
|
||||
{
|
||||
@ -69,36 +68,12 @@ public TModel Get(int id)
|
||||
|
||||
}
|
||||
|
||||
public TModel Single(Expression<Func<TModel, bool>> predicate)
|
||||
{
|
||||
return _database.Select(predicate).Single();
|
||||
}
|
||||
|
||||
public TModel SingleOrDefault()
|
||||
{
|
||||
return All().Single();
|
||||
}
|
||||
|
||||
public TModel Single()
|
||||
{
|
||||
throw new System.NotImplementedException();
|
||||
}
|
||||
|
||||
public TModel SingleOrDefault(Expression<Func<TModel, bool>> predicate)
|
||||
{
|
||||
return _database.Select(predicate).SingleOrDefault();
|
||||
}
|
||||
|
||||
public List<TModel> Where(Expression<Func<TModel, bool>> predicate)
|
||||
{
|
||||
return _database.Select(predicate);
|
||||
}
|
||||
|
||||
public List<TModel> Where(SqlExpressionVisitor<TModel> expression)
|
||||
{
|
||||
return _database.Select(expression);
|
||||
}
|
||||
|
||||
public TModel Insert(TModel model)
|
||||
{
|
||||
if (model.Id != 0)
|
||||
@ -106,8 +81,7 @@ public TModel Insert(TModel model)
|
||||
throw new InvalidOperationException("Can't insert model with existing ID");
|
||||
}
|
||||
|
||||
_database.Insert(model);
|
||||
model.Id = (int)_database.GetLastInsertId();
|
||||
var id = _dataMapper.Insert(model);
|
||||
return model;
|
||||
}
|
||||
|
||||
@ -118,56 +92,61 @@ public TModel Update(TModel model)
|
||||
throw new InvalidOperationException("Can't update model with ID 0");
|
||||
}
|
||||
|
||||
_database.Update(model);
|
||||
_dataMapper.Update(model, c => c.Id == model.Id);
|
||||
return model;
|
||||
}
|
||||
|
||||
|
||||
public void Delete(TModel model)
|
||||
{
|
||||
_database.Delete(model);
|
||||
_dataMapper.Delete<TModel>(c => c.Id == model.Id);
|
||||
}
|
||||
|
||||
public void InsertMany(IList<TModel> models)
|
||||
{
|
||||
_database.InsertAll(models);
|
||||
foreach (var model in models)
|
||||
{
|
||||
Insert(model);
|
||||
}
|
||||
}
|
||||
|
||||
public void UpdateMany(IList<TModel> models)
|
||||
{
|
||||
_database.UpdateAll(models);
|
||||
foreach (var model in models)
|
||||
{
|
||||
Update(model);
|
||||
}
|
||||
}
|
||||
|
||||
public void DeleteMany(List<TModel> models)
|
||||
{
|
||||
_database.DeleteAll(models);
|
||||
models.ForEach(Delete);
|
||||
}
|
||||
|
||||
public TModel Upsert(TModel model)
|
||||
{
|
||||
if (model.Id == 0)
|
||||
{
|
||||
_database.Insert(model);
|
||||
model.Id = (int)_database.GetLastInsertId();
|
||||
Insert(model);
|
||||
return model;
|
||||
}
|
||||
_database.Update(model);
|
||||
Update(model);
|
||||
return model;
|
||||
}
|
||||
|
||||
public void Delete(int id)
|
||||
{
|
||||
_database.DeleteById<TModel>(id);
|
||||
_dataMapper.Delete<TModel>(c => c.Id == id);
|
||||
}
|
||||
|
||||
public void DeleteMany(IEnumerable<int> ids)
|
||||
{
|
||||
_database.DeleteByIds<TModel>(ids);
|
||||
ids.ToList().ForEach(Delete);
|
||||
}
|
||||
|
||||
public void Purge()
|
||||
{
|
||||
_database.DeleteAll<TModel>();
|
||||
_dataMapper.Delete<TModel>(c => c.Id > -1);
|
||||
}
|
||||
|
||||
public bool HasItems()
|
||||
@ -182,7 +161,7 @@ public void UpdateFields<TKey>(TModel model, Expression<Func<TModel, TKey>> only
|
||||
throw new InvalidOperationException("Attempted to updated model without ID");
|
||||
}
|
||||
|
||||
_database.UpdateOnly(model, onlyFields, m => m.Id == model.Id);
|
||||
// _database.UpdateOnly(model, onlyFields, m => m.Id == model.Id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
21
NzbDrone.Core/Datastore/Database.cs
Normal file
21
NzbDrone.Core/Datastore/Database.cs
Normal file
@ -0,0 +1,21 @@
|
||||
using System;
|
||||
using Marr.Data;
|
||||
|
||||
namespace NzbDrone.Core.Datastore
|
||||
{
|
||||
public interface IDatabase
|
||||
{
|
||||
IDataMapper DataMapper { get; }
|
||||
}
|
||||
|
||||
public class Database : IDatabase
|
||||
{
|
||||
|
||||
public Database(IDataMapper dataMapper)
|
||||
{
|
||||
DataMapper = dataMapper;
|
||||
}
|
||||
|
||||
public IDataMapper DataMapper { get; private set; }
|
||||
}
|
||||
}
|
@ -1,25 +1,21 @@
|
||||
using System;
|
||||
using System.Data;
|
||||
using ServiceStack.OrmLite;
|
||||
using ServiceStack.OrmLite.Sqlite;
|
||||
using Marr.Data;
|
||||
using Mono.Data.Sqlite;
|
||||
|
||||
|
||||
namespace NzbDrone.Core.Datastore
|
||||
{
|
||||
public interface IDbFactory
|
||||
{
|
||||
IDbConnection Create(string dbPath = null);
|
||||
IDatabase Create(string dbPath = null);
|
||||
}
|
||||
|
||||
public class DbFactory : IDbFactory
|
||||
{
|
||||
private const string MemoryConnectionString = "Data Source=:memory:;Version=3;New=True;";
|
||||
|
||||
static DbFactory()
|
||||
{
|
||||
OrmLiteConfig.DialectProvider = new SqliteOrmLiteDialectProvider();
|
||||
}
|
||||
|
||||
public IDbConnection Create(string dbPath = null)
|
||||
public IDatabase Create(string dbPath = null)
|
||||
{
|
||||
var connectionString = MemoryConnectionString;
|
||||
|
||||
@ -29,16 +25,12 @@ public IDbConnection Create(string dbPath = null)
|
||||
}
|
||||
|
||||
MigrationHelper.MigrateToLatest(connectionString, MigrationType.Main);
|
||||
|
||||
OrmLiteConfig.DialectProvider = new SqliteOrmLiteDialectProvider();
|
||||
var dbFactory = new OrmLiteConnectionFactory(connectionString);
|
||||
var connection = dbFactory.Open();
|
||||
|
||||
Migration.CreateTables(connection);
|
||||
|
||||
return connection;
|
||||
var dataMapper = new DataMapper(SqliteFactory.Instance, connectionString);
|
||||
return new Database(dataMapper);
|
||||
}
|
||||
|
||||
|
||||
|
||||
private string GetConnectionString(string dbPath)
|
||||
{
|
||||
return String.Format("Data Source={0};Version=3;", dbPath);
|
||||
|
@ -1,22 +1,10 @@
|
||||
using System.Data;
|
||||
using System.Linq;
|
||||
using ServiceStack.OrmLite;
|
||||
|
||||
|
||||
namespace NzbDrone.Core.Datastore
|
||||
{
|
||||
public static class Migration
|
||||
{
|
||||
public static void CreateTables(IDbConnection dbConnection)
|
||||
{
|
||||
var types = typeof(ModelBase).Assembly.GetTypes();
|
||||
|
||||
var models = types.Where(c => c.BaseType == typeof(ModelBase));
|
||||
|
||||
foreach (var model in models)
|
||||
{
|
||||
dbConnection.CreateTable(true, model);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -1,12 +1,12 @@
|
||||
using System.Diagnostics;
|
||||
using ServiceStack.DataAnnotations;
|
||||
using System.Data;
|
||||
using System.Diagnostics;
|
||||
using Marr.Data;
|
||||
|
||||
namespace NzbDrone.Core.Datastore
|
||||
{
|
||||
[DebuggerDisplay("{GetType()} ID = {Id}")]
|
||||
public abstract class ModelBase
|
||||
{
|
||||
[AutoIncrement]
|
||||
public int Id { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -1,4 +1,5 @@
|
||||
using System.Data;
|
||||
using System.Linq;
|
||||
using NzbDrone.Core.Datastore;
|
||||
|
||||
namespace NzbDrone.Core.ExternalNotification
|
||||
@ -10,14 +11,14 @@ public interface IExternalNotificationRepository : IBasicRepository<ExternalNoti
|
||||
|
||||
public class ExternalNotificationRepository : BasicRepository<ExternalNotificationDefinition>, IExternalNotificationRepository
|
||||
{
|
||||
public ExternalNotificationRepository(IDbConnection database)
|
||||
public ExternalNotificationRepository(IDatabase database)
|
||||
: base(database)
|
||||
{
|
||||
}
|
||||
|
||||
public ExternalNotificationDefinition Get(string name)
|
||||
{
|
||||
return SingleOrDefault(c => c.Name.ToLower() == name.ToLower());
|
||||
return Queryable().SingleOrDefault(c => c.Name.ToLower() == name.ToLower());
|
||||
}
|
||||
}
|
||||
}
|
@ -14,21 +14,21 @@ public interface IHistoryRepository : IBasicRepository<History>
|
||||
|
||||
public class HistoryRepository : BasicRepository<History>, IHistoryRepository
|
||||
{
|
||||
public HistoryRepository(IDbConnection database)
|
||||
public HistoryRepository(IDatabase database)
|
||||
: base(database)
|
||||
{
|
||||
}
|
||||
|
||||
public void Trim()
|
||||
{
|
||||
var oldIds = Where(c => c.Date < DateTime.Now.AddDays(-30).Date).Select(c => c.Id);
|
||||
var oldIds = Queryable().Where(c => c.Date < DateTime.Now.AddDays(-30).Date).Select(c => c.Id);
|
||||
DeleteMany(oldIds);
|
||||
}
|
||||
|
||||
|
||||
public QualityModel GetBestQualityInHistory(int episodeId)
|
||||
{
|
||||
var history = Where(c => c.EpisodeId == episodeId)
|
||||
var history = Queryable().Where(c => c.EpisodeId == episodeId)
|
||||
.OrderByDescending(c => c.Quality).FirstOrDefault();
|
||||
|
||||
if (history != null)
|
||||
|
@ -1,5 +1,6 @@
|
||||
using System;
|
||||
using System.Data;
|
||||
using System.Linq;
|
||||
using NzbDrone.Core.Datastore;
|
||||
|
||||
namespace NzbDrone.Core.Indexers
|
||||
@ -11,14 +12,14 @@ public interface IIndexerRepository : IBasicRepository<Indexer>
|
||||
|
||||
public class IndexerRepository : BasicRepository<Indexer>, IIndexerRepository
|
||||
{
|
||||
public IndexerRepository(IDbConnection database)
|
||||
public IndexerRepository(IDatabase database)
|
||||
: base(database)
|
||||
{
|
||||
}
|
||||
|
||||
public Indexer Find(Type type)
|
||||
{
|
||||
return Single(i => i.Type == type.ToString());
|
||||
return Queryable().Single(i => i.Type == type.ToString());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -14,13 +14,13 @@ public interface INewznabRepository : IBasicRepository<NewznabDefinition>
|
||||
|
||||
public class NewznabRepository : BasicRepository<NewznabDefinition>, INewznabRepository
|
||||
{
|
||||
public NewznabRepository(IDbConnection database) : base(database)
|
||||
public NewznabRepository(IDatabase database) : base(database)
|
||||
{
|
||||
}
|
||||
|
||||
public IEnumerable<NewznabDefinition> Enabled()
|
||||
{
|
||||
return Where(n => n.Enable);
|
||||
return Queryable().Where(n => n.Enabled);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -12,14 +12,14 @@ public interface ILogRepository : IBasicRepository<Log>
|
||||
|
||||
public class LogRepository : BasicRepository<Log>, ILogRepository
|
||||
{
|
||||
public LogRepository(IDbConnection database)
|
||||
public LogRepository(IDatabase database)
|
||||
: base(database)
|
||||
{
|
||||
}
|
||||
|
||||
public void Trim()
|
||||
{
|
||||
var oldIds = Where(c => c.Time < DateTime.Now.AddDays(-30).Date).Select(c => c.Id);
|
||||
var oldIds = Queryable().Where(c => c.Time < DateTime.Now.AddDays(-30).Date).Select(c => c.Id);
|
||||
DeleteMany(oldIds);
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,5 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.Linq;
|
||||
using NLog;
|
||||
using NzbDrone.Core.Datastore;
|
||||
@ -19,7 +18,7 @@ public class JobRepository : BasicRepository<JobDefinition>, IJobRepository
|
||||
private readonly IEnumerable<IJob> _jobs;
|
||||
private readonly Logger _logger;
|
||||
|
||||
public JobRepository(IDbConnection database, IEnumerable<IJob> jobs, Logger logger)
|
||||
public JobRepository(IDatabase database, IEnumerable<IJob> jobs, Logger logger)
|
||||
: base(database)
|
||||
{
|
||||
_jobs = jobs;
|
||||
@ -28,13 +27,13 @@ public JobRepository(IDbConnection database, IEnumerable<IJob> jobs, Logger logg
|
||||
|
||||
public JobDefinition GetDefinition(Type type)
|
||||
{
|
||||
return Single(c => c.Type == type.FullName);
|
||||
return Queryable().Single(c => c.TypeName == type.FullName);
|
||||
}
|
||||
|
||||
|
||||
public IList<JobDefinition> GetPendingJobs()
|
||||
{
|
||||
return Where(c => c.Enable && c.LastExecution < DateTime.Now.AddMinutes(-c.Interval)).ToList();
|
||||
return Queryable().Where(c => c.Enable && c.LastExecution < DateTime.Now.AddMinutes(-c.Interval)).ToList();
|
||||
}
|
||||
|
||||
public void Init()
|
||||
|
@ -15,7 +15,7 @@ public interface IMediaFileRepository : IBasicRepository<EpisodeFile>
|
||||
|
||||
public class MediaFileRepository : BasicRepository<EpisodeFile>, IMediaFileRepository
|
||||
{
|
||||
public MediaFileRepository(IDbConnection database)
|
||||
public MediaFileRepository(IDatabase database)
|
||||
: base(database)
|
||||
{
|
||||
}
|
||||
@ -23,17 +23,17 @@ public MediaFileRepository(IDbConnection database)
|
||||
|
||||
public EpisodeFile GetFileByPath(string path)
|
||||
{
|
||||
return SingleOrDefault(c => c.Path == path);
|
||||
return Queryable().SingleOrDefault(c => c.Path == path);
|
||||
}
|
||||
|
||||
public List<EpisodeFile> GetFilesBySeries(int seriesId)
|
||||
{
|
||||
return Where(c => c.SeriesId == seriesId).ToList();
|
||||
return Queryable().Where(c => c.SeriesId == seriesId).ToList();
|
||||
}
|
||||
|
||||
public List<EpisodeFile> GetFilesBySeason(int seriesId, int seasonNumber)
|
||||
{
|
||||
return Where(c => c.SeriesId == seriesId && c.SeasonNumber == seasonNumber).ToList();
|
||||
return Queryable().Where(c => c.SeriesId == seriesId && c.SeasonNumber == seasonNumber).ToList();
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -132,6 +132,8 @@
|
||||
</Reference>
|
||||
<Reference Include="FluentMigrator.Runner">
|
||||
<HintPath>..\packages\FluentMigrator.1.0.6.0\tools\FluentMigrator.Runner.dll</HintPath>
|
||||
<Reference Include="FastReflection">
|
||||
<HintPath>..\packages\MarrDataMapper.3.17.4747.34302\lib\FastReflection.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Growl.Connector">
|
||||
<HintPath>..\packages\Growl.0.6\lib\Growl.Connector.dll</HintPath>
|
||||
@ -142,12 +144,16 @@
|
||||
<Reference Include="Ionic.Zip">
|
||||
<HintPath>..\packages\DotNetZip.1.9.1.8\lib\net20\Ionic.Zip.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Marr.Data">
|
||||
<HintPath>..\packages\MarrDataMapper.3.17.4747.34302\lib\Marr.Data.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="MediaInfoDotNet">
|
||||
<HintPath>..\packages\MediaInfoNet.0.3\lib\MediaInfoDotNet.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
<Reference Include="Mono.Data.Sqlite">
|
||||
<HintPath>..\packages\ServiceStack.OrmLite.Sqlite.Mono.3.9.42\lib\net35\Mono.Data.Sqlite.dll</HintPath>
|
||||
<Reference Include="Mono.Data.Sqlite, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\Libraries\Sqlite\Mono.Data.Sqlite.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
@ -163,21 +169,6 @@
|
||||
<Reference Include="RestSharp">
|
||||
<HintPath>..\packages\RestSharp.104.1\lib\net4\RestSharp.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="ServiceStack.Common">
|
||||
<HintPath>..\packages\ServiceStack.Common.3.9.42\lib\net35\ServiceStack.Common.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="ServiceStack.Interfaces">
|
||||
<HintPath>..\packages\ServiceStack.Common.3.9.42\lib\net35\ServiceStack.Interfaces.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="ServiceStack.OrmLite">
|
||||
<HintPath>..\packages\ServiceStack.OrmLite.Sqlite.Mono.3.9.42\lib\net35\ServiceStack.OrmLite.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="ServiceStack.OrmLite.Sqlite">
|
||||
<HintPath>..\packages\ServiceStack.OrmLite.Sqlite.Mono.3.9.42\lib\net35\ServiceStack.OrmLite.Sqlite.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="ServiceStack.Text">
|
||||
<HintPath>..\packages\ServiceStack.Text.3.9.42\lib\net35\ServiceStack.Text.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="SignalR">
|
||||
<HintPath>..\packages\SignalR.Server.0.5.3\lib\net40\SignalR.dll</HintPath>
|
||||
</Reference>
|
||||
@ -214,6 +205,7 @@
|
||||
<Compile Include="Configuration\IConfigService.cs" />
|
||||
<Compile Include="Constants.cs" />
|
||||
<Compile Include="ContainerExtensions.cs" />
|
||||
<Compile Include="Datastore\Database.cs" />
|
||||
<Compile Include="Datastore\DbFactory.cs" />
|
||||
<Compile Include="Datastore\MigrationHelper.cs" />
|
||||
<Compile Include="Datastore\Migration.cs" />
|
||||
|
@ -14,7 +14,7 @@ public interface IQualityProfileRepository : IBasicRepository<QualityProfile>
|
||||
|
||||
public class QualityProfileRepository : BasicRepository<QualityProfile>, IQualityProfileRepository
|
||||
{
|
||||
public QualityProfileRepository(IDbConnection database)
|
||||
public QualityProfileRepository(IDatabase database)
|
||||
: base(database)
|
||||
{
|
||||
}
|
||||
|
@ -11,14 +11,14 @@ public interface IQualitySizeRepository : IBasicRepository<QualitySize>
|
||||
|
||||
public class QualitySizeRepository : BasicRepository<QualitySize>, IQualitySizeRepository
|
||||
{
|
||||
public QualitySizeRepository(IDbConnection database)
|
||||
public QualitySizeRepository(IDatabase database)
|
||||
: base(database)
|
||||
{
|
||||
}
|
||||
|
||||
public QualitySize GetByQualityId(int qualityId)
|
||||
{
|
||||
return Single(q => q.QualityId == qualityId);
|
||||
return Queryable().Single(q => q.QualityId == qualityId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -13,19 +13,19 @@ public interface ISceneMappingRepository : IBasicRepository<SceneMapping>
|
||||
|
||||
public class SceneMappingRepository : BasicRepository<SceneMapping>, ISceneMappingRepository
|
||||
{
|
||||
public SceneMappingRepository(IDbConnection database)
|
||||
public SceneMappingRepository(IDatabase database)
|
||||
: base(database)
|
||||
{
|
||||
}
|
||||
|
||||
public SceneMapping FindByTvdbId(int tvdbId)
|
||||
{
|
||||
return SingleOrDefault(c => c.TvdbId == tvdbId);
|
||||
return Queryable().SingleOrDefault(c => c.TvdbId == tvdbId);
|
||||
}
|
||||
|
||||
public SceneMapping FindByCleanTitle(string cleanTitle)
|
||||
{
|
||||
return SingleOrDefault(c => c.CleanTitle == cleanTitle);
|
||||
return Queryable().SingleOrDefault(c => c.CleanTitle == cleanTitle);
|
||||
}
|
||||
}
|
||||
}
|
Binary file not shown.
@ -2,7 +2,7 @@
|
||||
using System.Data;
|
||||
using System.Linq;
|
||||
using NzbDrone.Core.Datastore;
|
||||
using ServiceStack.OrmLite;
|
||||
|
||||
|
||||
namespace NzbDrone.Core.Tv
|
||||
{
|
||||
@ -18,33 +18,33 @@ public class SeasonRepository : BasicRepository<Season>, ISeasonRepository
|
||||
{
|
||||
private readonly IDbConnection _database;
|
||||
|
||||
public SeasonRepository(IDbConnection database)
|
||||
public SeasonRepository(IDatabase database)
|
||||
: base(database)
|
||||
{
|
||||
}
|
||||
|
||||
public IList<int> GetSeasonNumbers(int seriesId)
|
||||
{
|
||||
return _database.List<int>("SELECT SeasonNumber WHERE SeriesId = {0}", seriesId);
|
||||
return Queryable().Where(c => c.SeriesId == seriesId).Select(c => c.SeriesId).ToList();
|
||||
}
|
||||
|
||||
public Season Get(int seriesId, int seasonNumber)
|
||||
{
|
||||
return _database.Select<Season>(s => s.SeriesId == seriesId && s.SeasonNumber == seasonNumber).Single();
|
||||
return Queryable().Single(s => s.SeriesId == seriesId && s.SeasonNumber == seasonNumber);
|
||||
}
|
||||
|
||||
public bool IsIgnored(int seriesId, int seasonNumber)
|
||||
{
|
||||
var season = _database.Select<Season>(s => s.SeriesId == seriesId && s.SeasonNumber == seasonNumber).SingleOrDefault();
|
||||
var season = Queryable().SingleOrDefault(s => s.SeriesId == seriesId && s.SeasonNumber == seasonNumber);
|
||||
|
||||
if(season == null) return false;
|
||||
if (season == null) return false;
|
||||
|
||||
return season.Ignored;
|
||||
}
|
||||
|
||||
public List<Season> GetSeasonBySeries(int seriesId)
|
||||
{
|
||||
return _database.Select<Season>(s => s.SeriesId == seriesId);
|
||||
return Queryable().Where(s => s.SeriesId == seriesId);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,5 +1,6 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.Linq;
|
||||
using NzbDrone.Core.Datastore;
|
||||
|
||||
namespace NzbDrone.Core.Tv
|
||||
@ -15,29 +16,29 @@ public interface ISeriesRepository : IBasicRepository<Series>
|
||||
|
||||
public class SeriesRepository : BasicRepository<Series>, ISeriesRepository
|
||||
{
|
||||
public SeriesRepository(IDbConnection database)
|
||||
public SeriesRepository(IDatabase database)
|
||||
: base(database)
|
||||
{
|
||||
}
|
||||
|
||||
public bool SeriesPathExists(string path)
|
||||
{
|
||||
return Any(c => c.Path == path);
|
||||
return Queryable().Any(c => c.Path == path);
|
||||
}
|
||||
|
||||
public List<Series> Search(string title)
|
||||
{
|
||||
return Where(s => s.Title.Contains(title));
|
||||
return Queryable().Where(s => s.Title.Contains(title));
|
||||
}
|
||||
|
||||
public Series GetByTitle(string cleanTitle)
|
||||
{
|
||||
return SingleOrDefault(s => s.CleanTitle.Equals(cleanTitle));
|
||||
return Queryable().SingleOrDefault(s => s.CleanTitle.Equals(cleanTitle));
|
||||
}
|
||||
|
||||
public Series FindByTvdbId(int tvdbId)
|
||||
{
|
||||
return SingleOrDefault(s => s.TvDbId.Equals(tvdbId));
|
||||
return Queryable().SingleOrDefault(s => s.TvDbId.Equals(tvdbId));
|
||||
}
|
||||
|
||||
public void SetSeriesType(int seriesId, SeriesTypes seriesType)
|
||||
|
@ -4,15 +4,13 @@
|
||||
<package id="DotNetZip" version="1.9.1.8" />
|
||||
<package id="FluentMigrator" version="1.0.6.0" targetFramework="net40" />
|
||||
<package id="Growl" version="0.6" />
|
||||
<package id="MarrDataMapper" version="3.17.4747.34302" targetFramework="net40" />
|
||||
<package id="MediaInfoNet" version="0.3" targetFramework="net40" />
|
||||
<package id="Microsoft.Web.Infrastructure" version="1.0.0.0" />
|
||||
<package id="Newtonsoft.Json" version="4.5.11" targetFramework="net40" />
|
||||
<package id="NLog" version="2.0.0.2000" />
|
||||
<package id="Prowlin" version="0.9.4456.26422" targetFramework="net40" />
|
||||
<package id="RestSharp" version="104.1" targetFramework="net40" />
|
||||
<package id="ServiceStack.Common" version="3.9.42" targetFramework="net40" />
|
||||
<package id="ServiceStack.OrmLite.Sqlite.Mono" version="3.9.42" targetFramework="net40" />
|
||||
<package id="ServiceStack.Text" version="3.9.42" targetFramework="net40" />
|
||||
<package id="SignalR.Hosting.Common" version="0.5.3" targetFramework="net40" />
|
||||
<package id="SignalR.Server" version="0.5.3" targetFramework="net40" />
|
||||
<package id="System.Data.SQLite.x86" version="1.0.84.0" targetFramework="net40" />
|
||||
|
@ -2,6 +2,7 @@
|
||||
<FileVersion>1</FileVersion>
|
||||
<AutoEnableOnStartup>True</AutoEnableOnStartup>
|
||||
<AllowParallelTestExecution>true</AllowParallelTestExecution>
|
||||
<AllowTestsToRunInParallelWithThemselves>true</AllowTestsToRunInParallelWithThemselves>
|
||||
<FrameworkUtilisationTypeForNUnit>UseDynamicAnalysis</FrameworkUtilisationTypeForNUnit>
|
||||
<FrameworkUtilisationTypeForGallio>Disabled</FrameworkUtilisationTypeForGallio>
|
||||
<FrameworkUtilisationTypeForMSpec>Disabled</FrameworkUtilisationTypeForMSpec>
|
||||
|
Loading…
Reference in New Issue
Block a user