// Copyright (C) Stichting Deltares 2016. All rights reserved. // // This file is part of Ringtoets. // // Ringtoets is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // // All names, logos, and references to "Deltares" are registered trademarks of // Stichting Deltares and remain full property of Stichting Deltares at all times. // All rights reserved. using System; using System.Data.Entity.Core.EntityClient; using System.Data.SQLite; namespace Application.Ringtoets.Storage { /// /// This class builds a connection string to a SQLite database file. /// public static class SqLiteConnectionStringBuilder { /// /// Constructs a connection string to connect the Entity Framework to . /// /// Location of the storage file. /// A new connection string. /// Thrown when is null or empty (only whitespaces). public static string BuildSqLiteEntityConnectionString(string filePath) { if (string.IsNullOrWhiteSpace(filePath)) { throw new ArgumentNullException(nameof(filePath), @"Cannot create a connection string without the path to the file to connect to."); } return new EntityConnectionStringBuilder { Metadata = string.Format(@"res://*/{0}.csdl|res://*/{0}.ssdl|res://*/{0}.msl", "DbContext.RingtoetsEntities"), Provider = @"System.Data.SQLite.EF6", ProviderConnectionString = BuildSqLiteConnectionString(GetDataSourceLocation(filePath)) }.ConnectionString; } /// /// Constructs a connection string to connect to . /// /// Location of the storage file. /// A new connection string. /// Thrown when is null or empty (only whitespaces). public static string BuildSqLiteConnectionString(string filePath) { if (string.IsNullOrWhiteSpace(filePath)) { throw new ArgumentNullException(nameof(filePath), @"Cannot create a connection string without the path to the file to connect to."); } return new SQLiteConnectionStringBuilder { FailIfMissing = true, DataSource = filePath, ReadOnly = false, ForeignKeys = true, Version = 3, Pooling = false }.ConnectionString; } private static string GetDataSourceLocation(string filePath) { return (new Uri(filePath).IsUnc) ? "\\\\" + filePath : filePath; } } }