Initial code version
This commit is contained in:
Родитель
cc544431f1
Коммит
4cdd0a714f
|
@ -0,0 +1,285 @@
|
|||
## Ignore Visual Studio temporary files, build results, and
|
||||
## files generated by popular Visual Studio add-ons.
|
||||
##
|
||||
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
|
||||
|
||||
# User-specific files
|
||||
*.suo
|
||||
*.user
|
||||
*.userosscache
|
||||
*.sln.docstates
|
||||
|
||||
# User-specific files (MonoDevelop/Xamarin Studio)
|
||||
*.userprefs
|
||||
|
||||
# Build results
|
||||
[Dd]ebug/
|
||||
[Dd]ebugPublic/
|
||||
[Rr]elease/
|
||||
[Rr]eleases/
|
||||
x64/
|
||||
x86/
|
||||
bld/
|
||||
[Bb]in/
|
||||
[Oo]bj/
|
||||
[Ll]og/
|
||||
|
||||
# Visual Studio 2015 cache/options directory
|
||||
.vs/
|
||||
# Uncomment if you have tasks that create the project's static files in wwwroot
|
||||
#wwwroot/
|
||||
|
||||
# MSTest test Results
|
||||
[Tt]est[Rr]esult*/
|
||||
[Bb]uild[Ll]og.*
|
||||
|
||||
# NUNIT
|
||||
*.VisualState.xml
|
||||
TestResult.xml
|
||||
|
||||
# Build Results of an ATL Project
|
||||
[Dd]ebugPS/
|
||||
[Rr]eleasePS/
|
||||
dlldata.c
|
||||
|
||||
# .NET Core
|
||||
project.lock.json
|
||||
project.fragment.lock.json
|
||||
artifacts/
|
||||
**/Properties/launchSettings.json
|
||||
|
||||
*_i.c
|
||||
*_p.c
|
||||
*_i.h
|
||||
*.ilk
|
||||
*.meta
|
||||
*.obj
|
||||
*.pch
|
||||
*.pdb
|
||||
*.pgc
|
||||
*.pgd
|
||||
*.rsp
|
||||
*.sbr
|
||||
*.tlb
|
||||
*.tli
|
||||
*.tlh
|
||||
*.tmp
|
||||
*.tmp_proj
|
||||
*.log
|
||||
*.vspscc
|
||||
*.vssscc
|
||||
.builds
|
||||
*.pidb
|
||||
*.svclog
|
||||
*.scc
|
||||
|
||||
# Chutzpah Test files
|
||||
_Chutzpah*
|
||||
|
||||
# Visual C++ cache files
|
||||
ipch/
|
||||
*.aps
|
||||
*.ncb
|
||||
*.opendb
|
||||
*.opensdf
|
||||
*.sdf
|
||||
*.cachefile
|
||||
*.VC.db
|
||||
*.VC.VC.opendb
|
||||
|
||||
# Visual Studio profiler
|
||||
*.psess
|
||||
*.vsp
|
||||
*.vspx
|
||||
*.sap
|
||||
|
||||
# TFS 2012 Local Workspace
|
||||
$tf/
|
||||
|
||||
# Guidance Automation Toolkit
|
||||
*.gpState
|
||||
|
||||
# ReSharper is a .NET coding add-in
|
||||
_ReSharper*/
|
||||
*.[Rr]e[Ss]harper
|
||||
*.DotSettings.user
|
||||
|
||||
# JustCode is a .NET coding add-in
|
||||
.JustCode
|
||||
|
||||
# TeamCity is a build add-in
|
||||
_TeamCity*
|
||||
|
||||
# DotCover is a Code Coverage Tool
|
||||
*.dotCover
|
||||
|
||||
# Visual Studio code coverage results
|
||||
*.coverage
|
||||
*.coveragexml
|
||||
|
||||
# NCrunch
|
||||
_NCrunch_*
|
||||
.*crunch*.local.xml
|
||||
nCrunchTemp_*
|
||||
|
||||
# MightyMoose
|
||||
*.mm.*
|
||||
AutoTest.Net/
|
||||
|
||||
# Web workbench (sass)
|
||||
.sass-cache/
|
||||
|
||||
# Installshield output folder
|
||||
[Ee]xpress/
|
||||
|
||||
# DocProject is a documentation generator add-in
|
||||
DocProject/buildhelp/
|
||||
DocProject/Help/*.HxT
|
||||
DocProject/Help/*.HxC
|
||||
DocProject/Help/*.hhc
|
||||
DocProject/Help/*.hhk
|
||||
DocProject/Help/*.hhp
|
||||
DocProject/Help/Html2
|
||||
DocProject/Help/html
|
||||
|
||||
# Click-Once directory
|
||||
publish/
|
||||
|
||||
# Publish Web Output
|
||||
*.[Pp]ublish.xml
|
||||
*.azurePubxml
|
||||
# TODO: Comment the next line if you want to checkin your web deploy settings
|
||||
# but database connection strings (with potential passwords) will be unencrypted
|
||||
*.pubxml
|
||||
*.publishproj
|
||||
|
||||
# Microsoft Azure Web App publish settings. Comment the next line if you want to
|
||||
# checkin your Azure Web App publish settings, but sensitive information contained
|
||||
# in these scripts will be unencrypted
|
||||
PublishScripts/
|
||||
|
||||
# NuGet Packages
|
||||
*.nupkg
|
||||
# The packages folder can be ignored because of Package Restore
|
||||
**/packages/*
|
||||
# except build/, which is used as an MSBuild target.
|
||||
!**/packages/build/
|
||||
# Uncomment if necessary however generally it will be regenerated when needed
|
||||
#!**/packages/repositories.config
|
||||
# NuGet v3's project.json files produces more ignoreable files
|
||||
*.nuget.props
|
||||
*.nuget.targets
|
||||
|
||||
# Microsoft Azure Build Output
|
||||
csx/
|
||||
*.build.csdef
|
||||
|
||||
# Microsoft Azure Emulator
|
||||
ecf/
|
||||
rcf/
|
||||
|
||||
# Windows Store app package directories and files
|
||||
AppPackages/
|
||||
BundleArtifacts/
|
||||
Package.StoreAssociation.xml
|
||||
_pkginfo.txt
|
||||
|
||||
# Visual Studio cache files
|
||||
# files ending in .cache can be ignored
|
||||
*.[Cc]ache
|
||||
# but keep track of directories ending in .cache
|
||||
!*.[Cc]ache/
|
||||
|
||||
# Others
|
||||
ClientBin/
|
||||
~$*
|
||||
*~
|
||||
*.dbmdl
|
||||
*.dbproj.schemaview
|
||||
*.jfm
|
||||
*.pfx
|
||||
*.publishsettings
|
||||
node_modules/
|
||||
orleans.codegen.cs
|
||||
|
||||
# Since there are multiple workflows, uncomment next line to ignore bower_components
|
||||
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
|
||||
#bower_components/
|
||||
|
||||
# RIA/Silverlight projects
|
||||
Generated_Code/
|
||||
|
||||
# Backup & report files from converting an old project file
|
||||
# to a newer Visual Studio version. Backup files are not needed,
|
||||
# because we have git ;-)
|
||||
_UpgradeReport_Files/
|
||||
Backup*/
|
||||
UpgradeLog*.XML
|
||||
UpgradeLog*.htm
|
||||
|
||||
# SQL Server files
|
||||
*.mdf
|
||||
*.ldf
|
||||
|
||||
# Business Intelligence projects
|
||||
*.rdl.data
|
||||
*.bim.layout
|
||||
*.bim_*.settings
|
||||
|
||||
# Microsoft Fakes
|
||||
FakesAssemblies/
|
||||
|
||||
# GhostDoc plugin setting file
|
||||
*.GhostDoc.xml
|
||||
|
||||
# Node.js Tools for Visual Studio
|
||||
.ntvs_analysis.dat
|
||||
|
||||
# Visual Studio 6 build log
|
||||
*.plg
|
||||
|
||||
# Visual Studio 6 workspace options file
|
||||
*.opt
|
||||
|
||||
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
|
||||
*.vbw
|
||||
|
||||
# Visual Studio LightSwitch build output
|
||||
**/*.HTMLClient/GeneratedArtifacts
|
||||
**/*.DesktopClient/GeneratedArtifacts
|
||||
**/*.DesktopClient/ModelManifest.xml
|
||||
**/*.Server/GeneratedArtifacts
|
||||
**/*.Server/ModelManifest.xml
|
||||
_Pvt_Extensions
|
||||
|
||||
# Paket dependency manager
|
||||
.paket/paket.exe
|
||||
paket-files/
|
||||
|
||||
# FAKE - F# Make
|
||||
.fake/
|
||||
|
||||
# JetBrains Rider
|
||||
.idea/
|
||||
*.sln.iml
|
||||
|
||||
# CodeRush
|
||||
.cr/
|
||||
|
||||
# Python Tools for Visual Studio (PTVS)
|
||||
__pycache__/
|
||||
*.pyc
|
||||
|
||||
# Cake - Uncomment if you are using it
|
||||
# tools/**
|
||||
# !tools/packages.config
|
||||
|
||||
|
||||
# Visual Studio Code
|
||||
.vscode/
|
||||
|
||||
# Publish profiles
|
||||
PublishProfiles/
|
||||
src/Trackable.Web/wwwroot/dist/**
|
||||
!src/Trackable.Web/wwwroot/dist/swagger/
|
||||
!src/Trackable.Web/wwwroot/dist/swagger/swagger.js
|
|
@ -0,0 +1,92 @@
|
|||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio 15
|
||||
VisualStudioVersion = 15.0.27004.2005
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{0561E119-10FD-4C6A-AC8B-2B0EE5EF0BA6}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{27997A27-AD3D-4136-B2D0-DE27E8CF41F4}"
|
||||
ProjectSection(SolutionItems) = preProject
|
||||
.gitignore = .gitignore
|
||||
README.md = README.md
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Trackable.Web", "src\Trackable.Web\Trackable.Web.csproj", "{389689E3-D4C9-4727-A2B3-AC1C10FE6934}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Trackable.Common", "src\Trackable.Common\Trackable.Common.csproj", "{2C1543F6-CD61-4455-8D6E-BB83721F25EE}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Trackable.EntityFramework", "src\Trackable.EntityFramework\Trackable.EntityFramework.csproj", "{A6B23FF3-82F4-4F29-960C-60C2F09ECCAD}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Trackable.Repositories", "src\Trackable.Repositories\Trackable.Repositories.csproj", "{11F3B370-096A-4D99-B5A4-9680D598C881}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Trackable.TripDetection", "src\Trackable.TripDetection\Trackable.TripDetection.csproj", "{23D218DA-4BA5-426C-8F97-E7EB569DEFA8}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Trackable.Configurations", "src\Trackable.Configurations\Trackable.Configurations.csproj", "{3D831301-E570-46C1-99F2-4605E6FAAC27}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Trackable.Services", "src\Trackable.Services\Trackable.Services.csproj", "{6615A7C7-9FCD-4519-A3FC-4BBA66A1329F}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Trackable.Models", "src\Trackable.Models\Trackable.Models.csproj", "{E101551A-0727-4CD4-8C38-65BF8884F5DD}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Trackable.Func", "src\Trackable.Func\Trackable.Func.csproj", "{E83655CF-A05B-496E-98F7-0D404489E522}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{389689E3-D4C9-4727-A2B3-AC1C10FE6934}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{389689E3-D4C9-4727-A2B3-AC1C10FE6934}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{389689E3-D4C9-4727-A2B3-AC1C10FE6934}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{389689E3-D4C9-4727-A2B3-AC1C10FE6934}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{2C1543F6-CD61-4455-8D6E-BB83721F25EE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{2C1543F6-CD61-4455-8D6E-BB83721F25EE}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{2C1543F6-CD61-4455-8D6E-BB83721F25EE}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{2C1543F6-CD61-4455-8D6E-BB83721F25EE}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{A6B23FF3-82F4-4F29-960C-60C2F09ECCAD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{A6B23FF3-82F4-4F29-960C-60C2F09ECCAD}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{A6B23FF3-82F4-4F29-960C-60C2F09ECCAD}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{A6B23FF3-82F4-4F29-960C-60C2F09ECCAD}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{11F3B370-096A-4D99-B5A4-9680D598C881}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{11F3B370-096A-4D99-B5A4-9680D598C881}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{11F3B370-096A-4D99-B5A4-9680D598C881}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{11F3B370-096A-4D99-B5A4-9680D598C881}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{23D218DA-4BA5-426C-8F97-E7EB569DEFA8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{23D218DA-4BA5-426C-8F97-E7EB569DEFA8}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{23D218DA-4BA5-426C-8F97-E7EB569DEFA8}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{23D218DA-4BA5-426C-8F97-E7EB569DEFA8}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{3D831301-E570-46C1-99F2-4605E6FAAC27}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{3D831301-E570-46C1-99F2-4605E6FAAC27}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{3D831301-E570-46C1-99F2-4605E6FAAC27}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{3D831301-E570-46C1-99F2-4605E6FAAC27}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{6615A7C7-9FCD-4519-A3FC-4BBA66A1329F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{6615A7C7-9FCD-4519-A3FC-4BBA66A1329F}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{6615A7C7-9FCD-4519-A3FC-4BBA66A1329F}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{6615A7C7-9FCD-4519-A3FC-4BBA66A1329F}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{E101551A-0727-4CD4-8C38-65BF8884F5DD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{E101551A-0727-4CD4-8C38-65BF8884F5DD}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{E101551A-0727-4CD4-8C38-65BF8884F5DD}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{E101551A-0727-4CD4-8C38-65BF8884F5DD}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{E83655CF-A05B-496E-98F7-0D404489E522}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{E83655CF-A05B-496E-98F7-0D404489E522}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{E83655CF-A05B-496E-98F7-0D404489E522}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{E83655CF-A05B-496E-98F7-0D404489E522}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(NestedProjects) = preSolution
|
||||
{389689E3-D4C9-4727-A2B3-AC1C10FE6934} = {0561E119-10FD-4C6A-AC8B-2B0EE5EF0BA6}
|
||||
{2C1543F6-CD61-4455-8D6E-BB83721F25EE} = {0561E119-10FD-4C6A-AC8B-2B0EE5EF0BA6}
|
||||
{A6B23FF3-82F4-4F29-960C-60C2F09ECCAD} = {0561E119-10FD-4C6A-AC8B-2B0EE5EF0BA6}
|
||||
{11F3B370-096A-4D99-B5A4-9680D598C881} = {0561E119-10FD-4C6A-AC8B-2B0EE5EF0BA6}
|
||||
{23D218DA-4BA5-426C-8F97-E7EB569DEFA8} = {0561E119-10FD-4C6A-AC8B-2B0EE5EF0BA6}
|
||||
{3D831301-E570-46C1-99F2-4605E6FAAC27} = {0561E119-10FD-4C6A-AC8B-2B0EE5EF0BA6}
|
||||
{6615A7C7-9FCD-4519-A3FC-4BBA66A1329F} = {0561E119-10FD-4C6A-AC8B-2B0EE5EF0BA6}
|
||||
{E101551A-0727-4CD4-8C38-65BF8884F5DD} = {0561E119-10FD-4C6A-AC8B-2B0EE5EF0BA6}
|
||||
{E83655CF-A05B-496E-98F7-0D404489E522} = {0561E119-10FD-4C6A-AC8B-2B0EE5EF0BA6}
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {CA4659C2-5F70-4BDE-8665-FFEF8F4234AD}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
|
@ -0,0 +1,25 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Trackable.Common
|
||||
{
|
||||
public class AsyncLazy<T> : Lazy<Task<T>>
|
||||
{
|
||||
public AsyncLazy() :
|
||||
base()
|
||||
{ }
|
||||
|
||||
public AsyncLazy(Func<T> valueFactory) :
|
||||
base(() => Task.Factory.StartNew(valueFactory))
|
||||
{ }
|
||||
public AsyncLazy(Func<Task<T>> taskFactory) :
|
||||
base(() => Task.Factory.StartNew(() => taskFactory()).Unwrap())
|
||||
{ }
|
||||
|
||||
public TaskAwaiter<T> GetAwaiter() { return Value.GetAwaiter(); }
|
||||
}
|
||||
}
|
|
@ -0,0 +1,90 @@
|
|||
using System;
|
||||
|
||||
namespace Trackable.Common
|
||||
{
|
||||
public static class DateTimeUtils
|
||||
{
|
||||
/// <summary>
|
||||
/// Get the equivalent datetime from the provided timestamp
|
||||
/// </summary>
|
||||
/// <param name="unixTime">Number of milliseconds since the epoch</param>
|
||||
/// <returns></returns>
|
||||
public static DateTime FromUnixTime(long unixTime)
|
||||
{
|
||||
var epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
|
||||
return epoch.AddMilliseconds(unixTime);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the equivalent timestamp from the provided time
|
||||
/// </summary>
|
||||
/// <param name="time">the time</param>
|
||||
/// <returns></returns>
|
||||
public static long ToUnixTime(DateTime time)
|
||||
{
|
||||
return (time.Ticks - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).Ticks) / TimeSpan.TicksPerMillisecond;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Convert the timestamp from milliseconds to seconds
|
||||
/// </summary>
|
||||
/// <param name="timestamp">Number of milliseconds since the epoch</param>
|
||||
/// <returns>Corresponding number of seconds</returns>
|
||||
public static long TimestampToSeconds(long timestamp)
|
||||
{
|
||||
return timestamp / 1000;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Convert the timestamp from seconds to milliseconds
|
||||
/// </summary>
|
||||
/// <param name="timestamp">Number of seconds since the epoch</param>
|
||||
/// <returns>Corresponding number of milliseconds</returns>
|
||||
public static long SecondsToTimestamp(long timestamp)
|
||||
{
|
||||
return timestamp * 1000;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Increment the timestamp
|
||||
/// </summary>
|
||||
/// <param name="timestamp">Number of milliseconds since the epoch</param>
|
||||
/// <param name="seconds">Number of seconds to increment the timestamp by</param>
|
||||
/// <returns></returns>
|
||||
public static long IncrementTimestamp(long timestamp, long seconds)
|
||||
{
|
||||
return timestamp + SecondsToTimestamp(seconds);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Difference between two timestamps in seconds
|
||||
/// </summary>
|
||||
/// <param name="timestamp1">Number of milliseconds since the epoch</param>
|
||||
/// <param name="timestamp2">Number of milliseconds since the epoch</param>
|
||||
/// <returns></returns>
|
||||
public static long DifferenceInMilliseconds(long timestamp1, long timestamp2)
|
||||
{
|
||||
return Math.Abs(timestamp1 - timestamp2);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get Current time as seconds from epoch
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public static long CurrentTimeInSeconds()
|
||||
{
|
||||
long epochTicks = new DateTime(1970, 1, 1).Ticks;
|
||||
return ((DateTime.UtcNow.Ticks - epochTicks) / TimeSpan.TicksPerSecond);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get Current time as milliseconds from epoch
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public static long CurrentTimeInMillseconds()
|
||||
{
|
||||
long epochTicks = new DateTime(1970, 1, 1).Ticks;
|
||||
return ((DateTime.UtcNow.Ticks - epochTicks) / TimeSpan.TicksPerMillisecond);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Trackable.Common
|
||||
{
|
||||
public static class EnumerableExtensions
|
||||
{
|
||||
public static void ForEach<T>(this IEnumerable<T> enumeration, Action<T> action)
|
||||
{
|
||||
foreach (T item in enumeration)
|
||||
{
|
||||
action(item);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Trackable.Common.Exceptions
|
||||
{
|
||||
public class BadArgumentException : ExceptionBase
|
||||
{
|
||||
public BadArgumentException(string userFriendlyMessage)
|
||||
: base(userFriendlyMessage)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Trackable.Common.Exceptions;
|
||||
|
||||
namespace Trackable.Common.Exceptions
|
||||
{
|
||||
public class DuplicateResourceException : ResourceExceptionBase
|
||||
{
|
||||
public DuplicateResourceException(string userFriendlyMessage)
|
||||
:base(userFriendlyMessage)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Trackable.Common.Exceptions
|
||||
{
|
||||
public class ExceptionBase : Exception
|
||||
{
|
||||
public ExceptionBase(string userFriendlyMessage)
|
||||
:base(userFriendlyMessage)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Trackable.Common.Exceptions
|
||||
{
|
||||
public class ResourceExceptionBase : ExceptionBase
|
||||
{
|
||||
public ResourceExceptionBase(string userFriendlyMessage)
|
||||
: base(userFriendlyMessage)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Trackable.Common.Exceptions;
|
||||
|
||||
namespace Trackable.Common.Exceptions
|
||||
{
|
||||
public class ResourceNotFoundException : ResourceExceptionBase
|
||||
{
|
||||
public ResourceNotFoundException(string userFriendlyMessage)
|
||||
:base(userFriendlyMessage)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,61 @@
|
|||
using Microsoft.AspNetCore.Builder;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Converters;
|
||||
using System;
|
||||
using Trackable.Common.Exceptions;
|
||||
|
||||
namespace Trackable.Common
|
||||
{
|
||||
public static class ILoggerExtensions
|
||||
{
|
||||
private static bool HeavyDebugEnabled { get; set; } = false;
|
||||
|
||||
public static void SetHeavyDebugEnabled(this IApplicationBuilder factory, bool heavyDebugEnabled)
|
||||
{
|
||||
HeavyDebugEnabled = heavyDebugEnabled;
|
||||
}
|
||||
|
||||
public static void LogDebugSerialize(this ILogger logger, string formatMessage, params object[] objects)
|
||||
{
|
||||
if (HeavyDebugEnabled)
|
||||
{
|
||||
logger.LogDebug(string.Format(formatMessage, SerializeObjects(objects)));
|
||||
}
|
||||
else
|
||||
{
|
||||
logger.LogDebug(formatMessage, objects);
|
||||
}
|
||||
}
|
||||
|
||||
public static void LogError(this ILogger logger, Exception e)
|
||||
{
|
||||
logger.LogError("Exception occured with message {0} and exception {1}", e.Message, e.ToString());
|
||||
}
|
||||
|
||||
public static void LogWarning(this ILogger logger, Exception e)
|
||||
{
|
||||
logger.LogWarning("Exception occured with message {0} and exception {1}", e.Message, e.ToString());
|
||||
}
|
||||
|
||||
private static string[] SerializeObjects(object[] objects)
|
||||
{
|
||||
var serializedObjects = new string[objects.Length];
|
||||
var converter = JsonSerializer.Create(GetSerializerSettings());
|
||||
|
||||
for (int i = 0; i < objects.Length; i++)
|
||||
{
|
||||
serializedObjects[i] = JsonConvert.SerializeObject(objects[i], GetSerializerSettings());
|
||||
}
|
||||
|
||||
return serializedObjects;
|
||||
}
|
||||
|
||||
private static JsonSerializerSettings GetSerializerSettings()
|
||||
{
|
||||
var settings = new JsonSerializerSettings();
|
||||
settings.Converters.Add(new StringEnumConverter());
|
||||
return settings;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Trackable.Common
|
||||
{
|
||||
public static class ListExtensions
|
||||
{
|
||||
public static void AddRange<T>(this IList<T> list, IEnumerable<T> elementsToAdd)
|
||||
{
|
||||
foreach (T item in elementsToAdd)
|
||||
{
|
||||
list.Add(item);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,27 @@
|
|||
using System;
|
||||
|
||||
namespace Trackable.Common
|
||||
{
|
||||
public static class ObjectExtensions
|
||||
{
|
||||
public static T ThrowIfNull<T>(this T obj, string paramName)
|
||||
{
|
||||
if (obj == null)
|
||||
{
|
||||
throw new ArgumentNullException(paramName);
|
||||
}
|
||||
|
||||
return obj;
|
||||
}
|
||||
|
||||
public static string ThrowIfNullOrEmpty(this string obj, string paramName)
|
||||
{
|
||||
if (string.IsNullOrEmpty(obj))
|
||||
{
|
||||
throw new ArgumentNullException(paramName);
|
||||
}
|
||||
|
||||
return obj;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,36 @@
|
|||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// General Information about an assembly is controlled through the following
|
||||
// set of attributes. Change these attribute values to modify the information
|
||||
// associated with an assembly.
|
||||
[assembly: AssemblyTitle("Trackable.Common")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("Trackable.Common")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2017")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// Setting ComVisible to false makes the types in this assembly not visible
|
||||
// to COM components. If you need to access a type in this assembly from
|
||||
// COM, set the ComVisible attribute to true on that type.
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||
[assembly: Guid("2c1543f6-cd61-4455-8d6e-bb83721f25ee")]
|
||||
|
||||
// Version information for an assembly consists of the following four values:
|
||||
//
|
||||
// Major Version
|
||||
// Minor Version
|
||||
// Build Number
|
||||
// Revision
|
||||
//
|
||||
// You can specify all the values or you can default the Build and Revision Numbers
|
||||
// by using the '*' as shown below:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("1.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
|
@ -0,0 +1,112 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProjectGuid>{2C1543F6-CD61-4455-8D6E-BB83721F25EE}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>Trackable.Common</RootNamespace>
|
||||
<AssemblyName>Trackable.Common</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<TargetFrameworkProfile />
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="Microsoft.AspNetCore.Http.Abstractions, Version=1.1.1.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
|
||||
<HintPath>$(SolutionDir)\packages\Microsoft.AspNetCore.Http.Abstractions.1.1.1\lib\net451\Microsoft.AspNetCore.Http.Abstractions.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.AspNetCore.Http.Features, Version=1.1.1.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
|
||||
<HintPath>$(SolutionDir)\packages\Microsoft.AspNetCore.Http.Features.1.1.1\lib\net451\Microsoft.AspNetCore.Http.Features.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.Extensions.DependencyInjection.Abstractions, Version=1.1.1.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
|
||||
<HintPath>$(SolutionDir)\packages\Microsoft.Extensions.DependencyInjection.Abstractions.1.1.1\lib\netstandard1.0\Microsoft.Extensions.DependencyInjection.Abstractions.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.Extensions.Logging, Version=1.1.1.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
|
||||
<HintPath>$(SolutionDir)\packages\Microsoft.Extensions.Logging.1.1.1\lib\netstandard1.1\Microsoft.Extensions.Logging.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.Extensions.Logging.Abstractions, Version=1.1.1.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
|
||||
<HintPath>$(SolutionDir)\packages\Microsoft.Extensions.Logging.Abstractions.1.1.1\lib\netstandard1.1\Microsoft.Extensions.Logging.Abstractions.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.Extensions.Primitives, Version=1.1.1.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
|
||||
<HintPath>$(SolutionDir)\packages\Microsoft.Extensions.Primitives.1.1.1\lib\netstandard1.0\Microsoft.Extensions.Primitives.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.Win32.Primitives, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>$(SolutionDir)\packages\Microsoft.Win32.Primitives.4.3.0\lib\net46\Microsoft.Win32.Primitives.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||
<HintPath>$(SolutionDir)\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.ComponentModel.Composition" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.IO.Compression.FileSystem" />
|
||||
<Reference Include="System.Net.Http, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>$(SolutionDir)\packages\System.Net.Http.4.3.0\lib\net46\System.Net.Http.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Numerics" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Xml" />
|
||||
<Reference Include="System.Xml.ReaderWriter, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>$(SolutionDir)\packages\System.Xml.ReaderWriter.4.3.0\lib\net46\System.Xml.ReaderWriter.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="AsyncLazy.cs" />
|
||||
<Compile Include="DateTimeUtils.cs" />
|
||||
<Compile Include="Exceptions\BadArgumentException.cs" />
|
||||
<Compile Include="Exceptions\DuplicateResourceException.cs" />
|
||||
<Compile Include="Exceptions\ExceptionBase.cs" />
|
||||
<Compile Include="Exceptions\ResourceExceptionBase.cs" />
|
||||
<Compile Include="Exceptions\ResourceNotFoundException.cs" />
|
||||
<Compile Include="ILoggerExtensions.cs" />
|
||||
<Compile Include="ListExtensions.cs" />
|
||||
<Compile Include="EnumerableExtensions.cs" />
|
||||
<Compile Include="ObjectExtensions.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="UserRoles.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="app.config" />
|
||||
<None Include="packages.config" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
|
@ -0,0 +1,15 @@
|
|||
<?xml version="1.0"?>
|
||||
<package >
|
||||
<metadata>
|
||||
<id>$id$</id>
|
||||
<version>$version$</version>
|
||||
<title>$title$</title>
|
||||
<authors>aa</authors>
|
||||
<owners>aa</owners>
|
||||
<requireLicenseAcceptance>false</requireLicenseAcceptance>
|
||||
<description>d</description>
|
||||
<releaseNotes>Summary of changes made in this release of the package.</releaseNotes>
|
||||
<copyright>Copyright 2017</copyright>
|
||||
<tags>Tag1 Tag2</tags>
|
||||
</metadata>
|
||||
</package>
|
|
@ -0,0 +1,24 @@
|
|||
namespace Trackable.Common
|
||||
{
|
||||
public class UserRoles
|
||||
{
|
||||
public const string Blocked = "Blocked";
|
||||
public const string Pending = "Pending";
|
||||
public const string DeviceRegistration = "DeviceRegistration";
|
||||
public const string TrackingDevice = "TrackingDevice";
|
||||
public const string Viewer = "Viewer";
|
||||
public const string Administrator = "Administrator";
|
||||
public const string Owner = "Owner";
|
||||
|
||||
public static string[] Roles => new string[]
|
||||
{
|
||||
Blocked,
|
||||
Pending,
|
||||
DeviceRegistration,
|
||||
TrackingDevice,
|
||||
Viewer,
|
||||
Administrator,
|
||||
Owner
|
||||
};
|
||||
}
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<runtime>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Diagnostics.DiagnosticSource" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral"/>
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0"/>
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Microsoft.Extensions.Logging.Abstractions" publicKeyToken="adb9793829ddae60" culture="neutral"/>
|
||||
<bindingRedirect oldVersion="0.0.0.0-1.1.1.0" newVersion="1.1.1.0"/>
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
</runtime>
|
||||
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1"/></startup></configuration>
|
|
@ -0,0 +1,14 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="Microsoft.AspNetCore.Http.Abstractions" version="1.1.1" targetFramework="net46" />
|
||||
<package id="Microsoft.AspNetCore.Http.Features" version="1.1.1" targetFramework="net46" />
|
||||
<package id="Microsoft.Extensions.DependencyInjection.Abstractions" version="1.1.1" targetFramework="net46" />
|
||||
<package id="Microsoft.Extensions.Logging" version="1.1.1" targetFramework="net46" />
|
||||
<package id="Microsoft.Extensions.Logging.Abstractions" version="1.1.1" targetFramework="net46" />
|
||||
<package id="Microsoft.Extensions.Primitives" version="1.1.1" targetFramework="net46" />
|
||||
<package id="Microsoft.NETCore.Platforms" version="2.0.0" targetFramework="net46" />
|
||||
<package id="Microsoft.Win32.Primitives" version="4.3.0" targetFramework="net46" />
|
||||
<package id="NETStandard.Library" version="1.6.1" targetFramework="net46" />
|
||||
<package id="Newtonsoft.Json" version="9.0.1" targetFramework="net46" />
|
||||
<package id="System.Net.Http" version="4.3.0" targetFramework="net46" />
|
||||
</packages>
|
|
@ -0,0 +1,21 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Trackable.Configurations
|
||||
{
|
||||
[AttributeUsage(AttributeTargets.Parameter)]
|
||||
public class ConfigurableAttribute : Attribute
|
||||
{
|
||||
private readonly object defaultValue;
|
||||
private readonly string description;
|
||||
|
||||
public ConfigurableAttribute(object defaultValue, string description = "")
|
||||
{
|
||||
this.defaultValue = defaultValue;
|
||||
this.description = description;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,125 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Trackable.Repositories;
|
||||
using Trackable.Models;
|
||||
|
||||
namespace Trackable.Configurations
|
||||
{
|
||||
public class ConfigurationManager : IConfigurationManager
|
||||
{
|
||||
private readonly IConfigurationRepository configurationRepository;
|
||||
private readonly string namespacePrefix;
|
||||
private readonly string specificNamespace;
|
||||
|
||||
public ConfigurationManager(IConfigurationRepository configurationRepository, string namespacePrefix, string specificNamespace)
|
||||
{
|
||||
this.configurationRepository = configurationRepository;
|
||||
this.namespacePrefix = namespacePrefix;
|
||||
this.specificNamespace = specificNamespace;
|
||||
}
|
||||
|
||||
public async Task<T> LoadWithDefaultsAsync<T>(params object[] allParameters)
|
||||
{
|
||||
var type = typeof(T);
|
||||
|
||||
var constructor = type.GetConstructors()
|
||||
.FirstOrDefault(c => c.GetParameters().Any(p => p.CustomAttributes.Any(ca => ca.AttributeType == typeof(ConfigurableAttribute))));
|
||||
|
||||
if (constructor == null)
|
||||
{
|
||||
constructor = type.GetConstructor(allParameters.Select(p => p.GetType()).ToArray());
|
||||
}
|
||||
|
||||
if (constructor == null)
|
||||
{
|
||||
return (T)Activator.CreateInstance(type);
|
||||
}
|
||||
|
||||
var parameters = constructor.GetParameters();
|
||||
var consturctorParametersList = new List<object>();
|
||||
var nonConfigurableParametersCounter = 0;
|
||||
foreach (var paramater in parameters)
|
||||
{
|
||||
var parameterValue = allParameters[nonConfigurableParametersCounter++];
|
||||
|
||||
var config = await FindOrCreateConfiguration(type.Name, paramater.Name, parameterValue, defaultIsSpecific: true);
|
||||
consturctorParametersList.Add(config.GetValue(paramater.ParameterType));
|
||||
}
|
||||
|
||||
return (T)constructor.Invoke(consturctorParametersList.ToArray());
|
||||
}
|
||||
|
||||
|
||||
public async Task<T> LoadAsync<T>(params object[] nonConfigurableParameters)
|
||||
{
|
||||
var type = typeof(T);
|
||||
|
||||
var constructor = type.GetConstructors()
|
||||
.FirstOrDefault(c => c.GetParameters().Any(p => p.CustomAttributes.Any(ca => ca.AttributeType == typeof(ConfigurableAttribute))));
|
||||
|
||||
if (constructor == null)
|
||||
{
|
||||
constructor = type.GetConstructor(nonConfigurableParameters.Select(p => p.GetType()).ToArray());
|
||||
}
|
||||
|
||||
if (constructor == null)
|
||||
{
|
||||
return (T)Activator.CreateInstance(type);
|
||||
}
|
||||
|
||||
var parameters = constructor.GetParameters();
|
||||
var consturctorParametersList = new List<object>();
|
||||
var nonConfigurableParametersCounter = 0;
|
||||
foreach (var paramater in parameters)
|
||||
{
|
||||
var configurableAttribute = paramater.CustomAttributes.FirstOrDefault(c => c.AttributeType == typeof(ConfigurableAttribute));
|
||||
|
||||
if (configurableAttribute != null)
|
||||
{
|
||||
var defaultValue = configurableAttribute.ConstructorArguments[0].Value;
|
||||
var description = configurableAttribute.ConstructorArguments[1].Value.ToString();
|
||||
|
||||
var config = await FindOrCreateConfiguration(type.Name, paramater.Name, defaultValue);
|
||||
consturctorParametersList.Add(config.GetValue(paramater.ParameterType));
|
||||
}
|
||||
else
|
||||
{
|
||||
consturctorParametersList.Add(nonConfigurableParameters[nonConfigurableParametersCounter++]);
|
||||
}
|
||||
}
|
||||
|
||||
return (T)constructor.Invoke(consturctorParametersList.ToArray());
|
||||
}
|
||||
|
||||
private async Task<Configuration> FindOrCreateConfiguration(
|
||||
string componentName,
|
||||
string parameterName,
|
||||
object defaultValue,
|
||||
string description = "",
|
||||
bool defaultIsSpecific = false)
|
||||
{
|
||||
var specificNamespace = $"{this.namespacePrefix}.{this.specificNamespace}.{componentName}";
|
||||
var commonNamespace = $"{this.namespacePrefix}.Common.{componentName}";
|
||||
|
||||
var config = await this.configurationRepository.GetAsync(specificNamespace, parameterName);
|
||||
|
||||
if (config == null)
|
||||
{
|
||||
config = await this.configurationRepository.GetAsync(commonNamespace, parameterName);
|
||||
}
|
||||
|
||||
if (config == null)
|
||||
{
|
||||
config = new Configuration(defaultIsSpecific ? specificNamespace : commonNamespace,
|
||||
parameterName, description, defaultValue);
|
||||
|
||||
await this.configurationRepository.AddAsync(config);
|
||||
}
|
||||
|
||||
return config;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,35 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Trackable.Configurations
|
||||
{
|
||||
interface IConfigurationManager
|
||||
{
|
||||
/// <summary>
|
||||
/// Creates an instance of a class that has constructor parameters marked with the
|
||||
/// configurable attribute. Configurable parameters take the corresponding configuration value
|
||||
/// in the database. If no value is present, a new value is created using the default specified
|
||||
/// in the configurable attribute. Parameters not marked with a configurable attribute must be
|
||||
/// passed in order to this function
|
||||
/// </summary>
|
||||
/// <typeparam name="T">Type of class to be instantiated</typeparam>
|
||||
/// <param name="nonConfigurableParameters">Constructor parameters that dont have a configurable attribute in order</param>
|
||||
/// <returns>The async task containing the newly created instance</returns>
|
||||
Task<T> LoadAsync<T>(params object[] nonConfigurableParameters);
|
||||
|
||||
/// <summary>
|
||||
/// Creates an instance of a class that has constructor parameters marked with the
|
||||
/// configurable attribute. Configurable parameters take the corresponding configuration value
|
||||
/// in the database. If no value is present, a new value is created using the default specified
|
||||
/// in the passed parameters. Defaults create using this method override defaults created from
|
||||
/// configurable attribute.
|
||||
/// </summary>
|
||||
/// <typeparam name="T">Type of class to be instantiated</typeparam>
|
||||
/// <param name="nonConfigurableParameters">All constructor parameters</param>
|
||||
/// <returns>The async task containing the newly created instance</returns>
|
||||
Task<T> LoadWithDefaultsAsync<T>(params object[] allParameters);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,36 @@
|
|||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// General Information about an assembly is controlled through the following
|
||||
// set of attributes. Change these attribute values to modify the information
|
||||
// associated with an assembly.
|
||||
[assembly: AssemblyTitle("Trackable.Configuration")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("Trackable.Configuration")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2017")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// Setting ComVisible to false makes the types in this assembly not visible
|
||||
// to COM components. If you need to access a type in this assembly from
|
||||
// COM, set the ComVisible attribute to true on that type.
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||
[assembly: Guid("3d831301-e570-46c1-99f2-4605e6faac27")]
|
||||
|
||||
// Version information for an assembly consists of the following four values:
|
||||
//
|
||||
// Major Version
|
||||
// Minor Version
|
||||
// Build Number
|
||||
// Revision
|
||||
//
|
||||
// You can specify all the values or you can default the Build and Revision Numbers
|
||||
// by using the '*' as shown below:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("1.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
|
@ -0,0 +1,70 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProjectGuid>{3D831301-E570-46C1-99F2-4605E6FAAC27}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>Trackable.Configurations</RootNamespace>
|
||||
<AssemblyName>Trackable.Configurations</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<TargetFrameworkProfile />
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Net.Http" />
|
||||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="ConfigurableAttribute.cs" />
|
||||
<Compile Include="ConfigurationManager.cs" />
|
||||
<Compile Include="IConfigurationManager.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Trackable.Models\Trackable.Models.csproj">
|
||||
<Project>{e101551a-0727-4cd4-8c38-65bf8884f5dd}</Project>
|
||||
<Name>Trackable.Models</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\Trackable.Repositories\Trackable.Repositories.csproj">
|
||||
<Project>{11F3B370-096A-4D99-B5A4-9680D598C881}</Project>
|
||||
<Name>Trackable.Repositories</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="app.config" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
|
@ -0,0 +1,34 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<runtime>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Diagnostics.DiagnosticSource" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Microsoft.Extensions.Logging.Abstractions" publicKeyToken="adb9793829ddae60" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-1.1.1.0" newVersion="1.1.1.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Microsoft.Extensions.Primitives" publicKeyToken="adb9793829ddae60" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-1.1.1.0" newVersion="1.1.1.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Microsoft.Extensions.DependencyInjection.Abstractions" publicKeyToken="adb9793829ddae60" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-1.1.1.0" newVersion="1.1.1.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="AutoMapper" publicKeyToken="be96cd2c38ef1005" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-6.0.2.0" newVersion="6.0.2.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
</runtime>
|
||||
<startup>
|
||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
|
||||
</startup>
|
||||
</configuration>
|
|
@ -0,0 +1,42 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<configSections>
|
||||
|
||||
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
|
||||
|
||||
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
|
||||
</configSections>
|
||||
<entityFramework>
|
||||
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
|
||||
<parameters>
|
||||
<parameter value="mssqllocaldb" />
|
||||
</parameters>
|
||||
</defaultConnectionFactory>
|
||||
<providers>
|
||||
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
|
||||
</providers>
|
||||
</entityFramework>
|
||||
<startup>
|
||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
|
||||
</startup>
|
||||
<runtime>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Diagnostics.DiagnosticSource" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Microsoft.Extensions.Logging.Abstractions" publicKeyToken="adb9793829ddae60" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-1.1.1.0" newVersion="1.1.1.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Microsoft.Extensions.Primitives" publicKeyToken="adb9793829ddae60" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-1.1.1.0" newVersion="1.1.1.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Microsoft.Extensions.DependencyInjection.Abstractions" publicKeyToken="adb9793829ddae60" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-1.1.1.0" newVersion="1.1.1.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
</runtime>
|
||||
</configuration>
|
|
@ -0,0 +1,23 @@
|
|||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
|
||||
namespace Trackable.EntityFramework
|
||||
{
|
||||
[Table("Assets")]
|
||||
public class AssetData : EntityBase<string>
|
||||
{
|
||||
public TrackingDeviceData TrackingDevice { get; set; }
|
||||
|
||||
public ICollection<GeoFenceUpdateData> NotificationHistory { get; set; }
|
||||
|
||||
public ICollection<GeoFenceData> GeoFenceDatas { get; set; }
|
||||
|
||||
[Required]
|
||||
public int AssetType { get; set; }
|
||||
|
||||
public AssetPropertiesData AssetProperties { get; set; }
|
||||
|
||||
public TrackingPointData LatestPosition { get; set; }
|
||||
}
|
||||
}
|
|
@ -0,0 +1,33 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Trackable.EntityFramework
|
||||
{
|
||||
[Table("AssetProperties")]
|
||||
public class AssetPropertiesData: EntityBase<int>
|
||||
{
|
||||
public double? AssetHeight { get; set; }
|
||||
|
||||
public double? AssetWidth { get; set; }
|
||||
|
||||
public double? AssetLength { get; set; }
|
||||
|
||||
public double? AssetWeight { get; set; }
|
||||
|
||||
public int? AssetAxels { get; set; }
|
||||
|
||||
public int? AssetTrailers { get; set; }
|
||||
|
||||
public bool? AssetSemi { get; set; }
|
||||
|
||||
public double? AssetMaxGradient { get; set; }
|
||||
|
||||
public double? AssetMinTurnRadius { get; set; }
|
||||
|
||||
public AssetData Asset { get; set; }
|
||||
}
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using System.Data.Entity.Spatial;
|
||||
|
||||
namespace Trackable.EntityFramework
|
||||
{
|
||||
[Table("Configurations")]
|
||||
public class ConfigurationData : EntityBase<string, string>
|
||||
{
|
||||
public string Description{ get; set; }
|
||||
|
||||
public string Value { get; set; }
|
||||
}
|
||||
}
|
|
@ -0,0 +1,308 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.Data.Entity;
|
||||
using System.Data.Entity.Core.Objects;
|
||||
using System.Data.Entity.Infrastructure;
|
||||
using System.Data.SqlClient;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
using Trackable.EntityFramework;
|
||||
|
||||
namespace Trackable.Repositories
|
||||
{
|
||||
public static class DbContextBulkOperations
|
||||
{
|
||||
private static string GenericTypeCreateSQL = @"
|
||||
IF NOT EXISTS (SELECT * FROM sys.types WHERE is_table_type = 1 AND name = '{0}')
|
||||
CREATE TYPE {0} AS TABLE
|
||||
(
|
||||
{1},
|
||||
{2}
|
||||
);
|
||||
";
|
||||
|
||||
private static string GenericProcedureCreateSQL = @"
|
||||
IF NOT EXISTS (SELECT * FROM sys.objects WHERE type = 'P' AND OBJECT_ID = OBJECT_ID('{0}'))
|
||||
exec('CREATE PROCEDURE {0} AS BEGIN SET NOCOUNT ON; END')
|
||||
";
|
||||
|
||||
private static string GenericProcedureAlterSQL = @"
|
||||
ALTER PROCEDURE {0}
|
||||
@TVP {1} READONLY
|
||||
AS
|
||||
BEGIN
|
||||
MERGE INTO {2} AS T
|
||||
USING @TVP AS S
|
||||
ON {3}
|
||||
WHEN MATCHED THEN UPDATE SET {4};
|
||||
END
|
||||
";
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Bulk updates the specified fields in the supplied items.
|
||||
/// </summary>
|
||||
/// <typeparam name="TEntity">The type of the items to be updated</typeparam>
|
||||
/// <param name="context">The database context used to update</param>
|
||||
/// <param name="items">List of items that will be updated</param>
|
||||
/// <param name="fieldsToUpdate">Fields in type TEntity that will be updated. Leave empty to update all fields</param>
|
||||
/// <returns></returns>
|
||||
public static async Task UpdateAsync<TEntity>(
|
||||
this DbContext context,
|
||||
IEnumerable<TEntity> items,
|
||||
params string[] fieldsToUpdate) where TEntity : class
|
||||
{
|
||||
var objectType = ObjectContext.GetObjectType(typeof(TEntity));
|
||||
|
||||
var tableName = context.GetTableName<TEntity>();
|
||||
var primaryKeyNames = context.GetPrimaryKeyNames<TEntity>();
|
||||
|
||||
var primaryKeyProperties = objectType
|
||||
.GetProperties()
|
||||
.Where(p => primaryKeyNames.Contains(p.Name));
|
||||
|
||||
var fieldProperties = objectType
|
||||
.GetProperties()
|
||||
.Where(p => !primaryKeyNames.Contains(p.Name));
|
||||
|
||||
if(fieldsToUpdate != null && fieldsToUpdate.Any())
|
||||
{
|
||||
fieldProperties = fieldProperties.Where(f => fieldsToUpdate.Contains(f.Name));
|
||||
}
|
||||
|
||||
var rows = new List<List<Object>>();
|
||||
foreach (var item in items)
|
||||
{
|
||||
var row = new List<object>();
|
||||
row.AddRange(primaryKeyProperties.Select(f => f.GetValue(item)));
|
||||
row.AddRange(fieldProperties.Select(f => f.GetValue(item)));
|
||||
|
||||
rows.Add(row);
|
||||
}
|
||||
|
||||
await UpdateAsync(
|
||||
context,
|
||||
tableName,
|
||||
primaryKeyProperties.ToDictionary(f => f.Name, f => f.PropertyType),
|
||||
fieldProperties.ToDictionary(f => f.Name, f => f.PropertyType),
|
||||
rows);
|
||||
}
|
||||
|
||||
private static async Task UpdateAsync(
|
||||
DbContext context,
|
||||
string tableName,
|
||||
IDictionary<string, Type> idFields,
|
||||
IDictionary<string, Type> fieldsToUpdate,
|
||||
IEnumerable<List<Object>> rows)
|
||||
{
|
||||
var table = new DataTable();
|
||||
|
||||
// Id fields are guaranteed to be primitives
|
||||
foreach (var idField in idFields)
|
||||
{
|
||||
table.Columns.Add(idField.Key, idField.Value);
|
||||
}
|
||||
|
||||
var primitiveFields = new Dictionary<string, Type>();
|
||||
var excludedColumns = new List<int>();
|
||||
int index = idFields.Count;
|
||||
foreach (var column in fieldsToUpdate)
|
||||
{
|
||||
// DataTable does not support Nullable types, instead primitive types should be added
|
||||
// and the column marked as AllowDbNull
|
||||
if (column.Value.IsGenericType && column.Value.GetGenericTypeDefinition() == typeof(Nullable<>))
|
||||
{
|
||||
DataColumn col = new DataColumn(column.Key, column.Value.GetGenericArguments().First());
|
||||
col.AllowDBNull = true;
|
||||
table.Columns.Add(col);
|
||||
|
||||
primitiveFields.Add(column.Key, column.Value.GetGenericArguments().First());
|
||||
}
|
||||
else if(SqlTypeHelper.GetDbType(column.Value).HasValue)
|
||||
{
|
||||
table.Columns.Add(column.Key, column.Value);
|
||||
primitiveFields.Add(column.Key, column.Value);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Column is unsupported type. Do not include it.
|
||||
excludedColumns.Add(index);
|
||||
}
|
||||
|
||||
index++;
|
||||
}
|
||||
|
||||
excludedColumns.Reverse();
|
||||
|
||||
foreach (var row in rows)
|
||||
{
|
||||
foreach(var col in excludedColumns)
|
||||
{
|
||||
row.RemoveAt(col);
|
||||
}
|
||||
|
||||
table.Rows.Add(row.ToArray());
|
||||
}
|
||||
|
||||
var connectionInitialState = context.Database.Connection.State;
|
||||
|
||||
try
|
||||
{
|
||||
if (connectionInitialState != ConnectionState.Open)
|
||||
{
|
||||
await context.Database.Connection.OpenAsync();
|
||||
}
|
||||
|
||||
var typeName = await ExecuteTypeSqlCommand(context, tableName, idFields, primitiveFields);
|
||||
var storedProcedureName = await ExecuteStoredProcedureSqlCommand(context, tableName, typeName, idFields, primitiveFields);
|
||||
|
||||
await ExecuteUpdateAsync(context, table, storedProcedureName, typeName);
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (connectionInitialState != ConnectionState.Open)
|
||||
{
|
||||
context.Database.Connection.Close();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private async static Task ExecuteUpdateAsync(DbContext context, DataTable table, string storedProcedureName, string typeName)
|
||||
{
|
||||
using (var command = context.Database.Connection.CreateCommand())
|
||||
{
|
||||
command.CommandText = storedProcedureName;
|
||||
command.CommandType = CommandType.StoredProcedure;
|
||||
|
||||
var tableParameter = new SqlParameter("TVP", table);
|
||||
tableParameter.SqlDbType = SqlDbType.Structured;
|
||||
tableParameter.TypeName = typeName;
|
||||
|
||||
command.Parameters.Add(tableParameter);
|
||||
await command.ExecuteNonQueryAsync();
|
||||
}
|
||||
}
|
||||
|
||||
private async static Task<string> ExecuteTypeSqlCommand(
|
||||
DbContext context,
|
||||
string tableName,
|
||||
IDictionary<string, Type> idFields,
|
||||
IDictionary<string, Type> fieldsToUpdate)
|
||||
{
|
||||
using (var command = context.Database.Connection.CreateCommand())
|
||||
{
|
||||
var typeName = GetUniqueTypeName(tableName, fieldsToUpdate);
|
||||
|
||||
var idFieldsString =
|
||||
string.Join(",", idFields.Select(f => $"{f.Key} {SqlTypeHelper.GetDbType(f.Value).ToString()}"));
|
||||
|
||||
var fieldsToUpdateBuilder = new StringBuilder();
|
||||
foreach (var fieldToUpdate in fieldsToUpdate)
|
||||
{
|
||||
var sqlType = SqlTypeHelper.GetDbType(fieldToUpdate.Value);
|
||||
var sqlTypeString = sqlType.ToString();
|
||||
if(sqlType == SqlDbType.NVarChar)
|
||||
{
|
||||
sqlTypeString += "(MAX)";
|
||||
}
|
||||
|
||||
fieldsToUpdateBuilder.Append($"{fieldToUpdate.Key} {sqlTypeString},");
|
||||
}
|
||||
|
||||
command.CommandType = CommandType.Text;
|
||||
command.CommandText = string.Format(
|
||||
GenericTypeCreateSQL,
|
||||
typeName,
|
||||
idFieldsString,
|
||||
fieldsToUpdateBuilder.ToString(0, fieldsToUpdateBuilder.Length - 1));
|
||||
|
||||
await command.ExecuteNonQueryAsync();
|
||||
return typeName;
|
||||
}
|
||||
}
|
||||
|
||||
private async static Task<string> ExecuteStoredProcedureSqlCommand(
|
||||
DbContext context,
|
||||
string tableName,
|
||||
string typeName,
|
||||
IDictionary<string, Type> idFields,
|
||||
IDictionary<string, Type> fieldsToUpdate)
|
||||
{
|
||||
var procedureName = $"sp_{typeName}";
|
||||
|
||||
using (var command = context.Database.Connection.CreateCommand())
|
||||
{
|
||||
command.CommandType = CommandType.Text;
|
||||
command.CommandText = string.Format(
|
||||
GenericProcedureCreateSQL,
|
||||
procedureName);
|
||||
|
||||
await command.ExecuteNonQueryAsync();
|
||||
}
|
||||
|
||||
using (var command = context.Database.Connection.CreateCommand())
|
||||
{
|
||||
var fieldsToUpdateString =
|
||||
string.Join(",", fieldsToUpdate.Select(f => $"T.{f.Key} = S.{f.Key}"));
|
||||
|
||||
var idFieldsString =
|
||||
string.Join(",", idFields.Select(f => $"T.{f.Key} = S.{f.Key}"));
|
||||
|
||||
command.CommandType = CommandType.Text;
|
||||
command.CommandText = string.Format(
|
||||
GenericProcedureAlterSQL,
|
||||
procedureName,
|
||||
typeName,
|
||||
tableName,
|
||||
idFieldsString,
|
||||
fieldsToUpdateString);
|
||||
|
||||
await command.ExecuteNonQueryAsync();
|
||||
}
|
||||
|
||||
return procedureName;
|
||||
}
|
||||
|
||||
private static string GetUniqueTypeName(string tableName, IDictionary<string, Type> fieldsToUpdate)
|
||||
{
|
||||
var uniqueName = $"{tableName}_";
|
||||
foreach (var f in fieldsToUpdate)
|
||||
{
|
||||
uniqueName += f.Key;
|
||||
}
|
||||
|
||||
return uniqueName;
|
||||
}
|
||||
|
||||
public static string GetTableName<TEntity>(this DbContext context) where TEntity : class
|
||||
{
|
||||
ObjectContext objectContext = ((IObjectContextAdapter)context).ObjectContext;
|
||||
|
||||
return objectContext.GetTableName<TEntity>();
|
||||
}
|
||||
|
||||
public static string GetTableName<TEntity>(this ObjectContext context) where TEntity : class
|
||||
{
|
||||
string sql = context.CreateObjectSet<TEntity>().ToTraceString();
|
||||
Regex regex = new Regex("FROM\\s+\\[.*\\]\\.\\[(?<table>.*)\\]\\s+AS");
|
||||
Match match = regex.Match(sql);
|
||||
|
||||
string table = match.Groups["table"].Value;
|
||||
return table;
|
||||
}
|
||||
|
||||
public static IEnumerable<string> GetPrimaryKeyNames<TEntity>(this DbContext context) where TEntity : class
|
||||
{
|
||||
ObjectContext objectContext = ((IObjectContextAdapter)context).ObjectContext;
|
||||
ObjectSet<TEntity> set = objectContext.CreateObjectSet<TEntity>();
|
||||
return set.EntitySet.ElementType
|
||||
.KeyMembers
|
||||
.Select(k => k.Name);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,12 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
|
||||
namespace Trackable.EntityFramework
|
||||
{
|
||||
[Table("DeploymentId")]
|
||||
public class DeploymentIdData : EntityBase<Guid>
|
||||
{
|
||||
}
|
||||
}
|
|
@ -0,0 +1,31 @@
|
|||
using System;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
|
||||
namespace Trackable.EntityFramework
|
||||
{
|
||||
public class EntityBase<TKey>
|
||||
{
|
||||
[Key]
|
||||
public TKey Id { get; set; }
|
||||
|
||||
public bool Deleted { get; set; }
|
||||
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
|
||||
public DateTime CreatedAtTimeUtc { get; set; }
|
||||
}
|
||||
|
||||
public class EntityBase<TKey1, TKey2>
|
||||
{
|
||||
[Key, Column(Order = 0)]
|
||||
public TKey1 Key1 { get; set; }
|
||||
|
||||
[Key, Column(Order = 1)]
|
||||
public TKey2 Key2 { get; set; }
|
||||
|
||||
public bool Deleted { get; set; }
|
||||
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
|
||||
public DateTime CreatedAtTimeUtc { get; set; }
|
||||
}
|
||||
}
|
|
@ -0,0 +1,31 @@
|
|||
using System.Data.Entity.Infrastructure;
|
||||
using System.Data.Entity.Migrations;
|
||||
using System.IO;
|
||||
using Microsoft.AspNetCore.Builder;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
|
||||
namespace Trackable.EntityFramework
|
||||
{
|
||||
public static class EntityFrameworkExtensions
|
||||
{
|
||||
public static IServiceCollection AddDbContext(this IServiceCollection services, string connectionString, string rootPath)
|
||||
{
|
||||
TrackableDbContext.LoadSqlServerTypes(Path.Combine(rootPath, "bin"));
|
||||
|
||||
return services.AddScoped(provider => new TrackableDbContext(connectionString));
|
||||
}
|
||||
|
||||
public static IApplicationBuilder UseDb(this IApplicationBuilder builder, string connectionString)
|
||||
{
|
||||
var configuration = new Migrations.Configuration
|
||||
{
|
||||
TargetDatabase = new DbConnectionInfo(connectionString, "System.Data.SqlClient")
|
||||
};
|
||||
|
||||
var migrator = new DbMigrator(configuration);
|
||||
migrator.Update();
|
||||
|
||||
return builder;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,30 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using System.Data.Entity.Spatial;
|
||||
|
||||
namespace Trackable.EntityFramework
|
||||
{
|
||||
[Table("GeoFences")]
|
||||
public class GeoFenceData : EntityBase<int>
|
||||
{
|
||||
[Required]
|
||||
public string Name { get; set; }
|
||||
|
||||
[Required]
|
||||
public string Emails { get; set; }
|
||||
|
||||
[Required]
|
||||
public int FenceType { get; set; }
|
||||
|
||||
[Required]
|
||||
public long CooldownInMinutes { get; set; }
|
||||
|
||||
public DbGeography Polygon { get; set; }
|
||||
|
||||
public ICollection<AssetData> AssetDatas { get; set; }
|
||||
|
||||
public ICollection<GeoFenceUpdateData> NotificationHistory { get; set; }
|
||||
}
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using System.Data.Entity.Spatial;
|
||||
|
||||
namespace Trackable.EntityFramework
|
||||
{
|
||||
[Table("GeoFenceUpdates")]
|
||||
public class GeoFenceUpdateData : EntityBase<int>
|
||||
{
|
||||
[Required]
|
||||
public int GeoFenceDataId { get; set; }
|
||||
|
||||
[Required]
|
||||
public string AssetDataId { get; set; }
|
||||
|
||||
[Required]
|
||||
public int Status { get; set; }
|
||||
}
|
||||
}
|
|
@ -0,0 +1,45 @@
|
|||
using System;
|
||||
using System.IO;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace SqlServerTypes
|
||||
{
|
||||
/// <summary>
|
||||
/// Utility methods related to CLR Types for SQL Server
|
||||
/// </summary>
|
||||
internal class Utilities
|
||||
{
|
||||
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
|
||||
private static extern IntPtr LoadLibrary(string libname);
|
||||
|
||||
/// <summary>
|
||||
/// Loads the required native assemblies for the current architecture (x86 or x64)
|
||||
/// </summary>
|
||||
/// <param name="rootApplicationPath">
|
||||
/// Root path of the current application. Use Server.MapPath(".") for ASP.NET applications
|
||||
/// and AppDomain.CurrentDomain.BaseDirectory for desktop applications.
|
||||
/// </param>
|
||||
public static void LoadNativeAssemblies(string rootApplicationPath)
|
||||
{
|
||||
var nativeBinaryPath = IntPtr.Size > 4
|
||||
? Path.Combine(rootApplicationPath, @"SqlServerTypes\x64\")
|
||||
: Path.Combine(rootApplicationPath, @"SqlServerTypes\x86\");
|
||||
|
||||
LoadNativeAssembly(nativeBinaryPath, "msvcr120.dll");
|
||||
LoadNativeAssembly(nativeBinaryPath, "SqlServerSpatial140.dll");
|
||||
}
|
||||
|
||||
private static void LoadNativeAssembly(string nativeBinaryPath, string assemblyName)
|
||||
{
|
||||
var path = Path.Combine(nativeBinaryPath, assemblyName);
|
||||
var ptr = LoadLibrary(path);
|
||||
if (ptr == IntPtr.Zero)
|
||||
{
|
||||
throw new Exception(string.Format(
|
||||
"Error loading {0} (ErrorCode: {1})",
|
||||
assemblyName,
|
||||
Marshal.GetLastWin32Error()));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using System.Data.Entity.Spatial;
|
||||
|
||||
namespace Trackable.EntityFramework
|
||||
{
|
||||
[Table("Locations")]
|
||||
public class LocationData : EntityBase<int>
|
||||
{
|
||||
public string Name { get; set; }
|
||||
|
||||
public string Address { get; set; }
|
||||
|
||||
public DbGeography Location { get; set; }
|
||||
|
||||
public int? MinimumWaitTime { get; set; }
|
||||
|
||||
public int? InterestLevel { get; set; }
|
||||
}
|
||||
}
|
29
Backend/src/Trackable.EntityFramework/Migrations/201701181247597_Initial.Designer.cs
сгенерированный
Normal file
29
Backend/src/Trackable.EntityFramework/Migrations/201701181247597_Initial.Designer.cs
сгенерированный
Normal file
|
@ -0,0 +1,29 @@
|
|||
// <auto-generated />
|
||||
namespace Trackable.EntityFramework.Migrations
|
||||
{
|
||||
using System.CodeDom.Compiler;
|
||||
using System.Data.Entity.Migrations;
|
||||
using System.Data.Entity.Migrations.Infrastructure;
|
||||
using System.Resources;
|
||||
|
||||
[GeneratedCode("EntityFramework.Migrations", "6.1.3-40302")]
|
||||
public sealed partial class Initial : IMigrationMetadata
|
||||
{
|
||||
private readonly ResourceManager Resources = new ResourceManager(typeof(Initial));
|
||||
|
||||
string IMigrationMetadata.Id
|
||||
{
|
||||
get { return "201701181247597_Initial"; }
|
||||
}
|
||||
|
||||
string IMigrationMetadata.Source
|
||||
{
|
||||
get { return null; }
|
||||
}
|
||||
|
||||
string IMigrationMetadata.Target
|
||||
{
|
||||
get { return Resources.GetString("Target"); }
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,104 @@
|
|||
namespace Trackable.EntityFramework.Migrations
|
||||
{
|
||||
using System;
|
||||
using System.Data.Entity.Migrations;
|
||||
|
||||
public partial class Initial : DbMigration
|
||||
{
|
||||
public override void Up()
|
||||
{
|
||||
CreateTable(
|
||||
"dbo.Assets",
|
||||
c => new
|
||||
{
|
||||
Id = c.String(nullable: false, maxLength: 128),
|
||||
Deleted = c.Boolean(nullable: false),
|
||||
CreatedAtTimeUtc = c.DateTime(defaultValueSql: "GETUTCDATE()", nullable: false),
|
||||
})
|
||||
.PrimaryKey(t => t.Id);
|
||||
|
||||
CreateTable(
|
||||
"dbo.TrackingDevices",
|
||||
c => new
|
||||
{
|
||||
Id = c.String(nullable: false, maxLength: 128),
|
||||
Name = c.String(),
|
||||
Model = c.String(),
|
||||
Phone = c.String(),
|
||||
Deleted = c.Boolean(nullable: false),
|
||||
CreatedAtTimeUtc = c.DateTime(defaultValueSql: "GETUTCDATE()", nullable: false),
|
||||
AssetId = c.String(maxLength: 128),
|
||||
})
|
||||
.PrimaryKey(t => t.Id)
|
||||
.ForeignKey("dbo.Assets", t => t.AssetId)
|
||||
.Index(t => t.AssetId);
|
||||
|
||||
CreateTable(
|
||||
"dbo.TrackingPoints",
|
||||
c => new
|
||||
{
|
||||
Id = c.Int(nullable: false, identity: true),
|
||||
DeviceTimeUtc = c.DateTime(nullable: false),
|
||||
Location = c.Geography(),
|
||||
Provider = c.String(),
|
||||
Debug = c.Boolean(nullable: false),
|
||||
Accuracy = c.Int(),
|
||||
Speed = c.Int(),
|
||||
Altitude = c.Int(),
|
||||
Bearing = c.Int(),
|
||||
TripId = c.Int(),
|
||||
AssetId = c.String(nullable: false, maxLength: 128),
|
||||
TrackingDeviceId = c.String(nullable: false, maxLength: 128),
|
||||
Deleted = c.Boolean(nullable: false),
|
||||
CreatedAtTimeUtc = c.DateTime(defaultValueSql: "GETUTCDATE()", nullable: false),
|
||||
})
|
||||
.PrimaryKey(t => t.Id)
|
||||
.ForeignKey("dbo.Assets", t => t.AssetId, cascadeDelete: true)
|
||||
.ForeignKey("dbo.TrackingDevices", t => t.TrackingDeviceId, cascadeDelete: true)
|
||||
.ForeignKey("dbo.Trips", t => t.TripId)
|
||||
.Index(t => t.TripId)
|
||||
.Index(t => t.AssetId)
|
||||
.Index(t => t.TrackingDeviceId);
|
||||
|
||||
CreateTable(
|
||||
"dbo.Trips",
|
||||
c => new
|
||||
{
|
||||
Id = c.Int(nullable: false, identity: true),
|
||||
StartTime = c.DateTime(nullable: false),
|
||||
EndTime = c.DateTime(nullable: false),
|
||||
Route = c.Geography(),
|
||||
AssetId = c.String(nullable: false, maxLength: 128),
|
||||
TrackingDeviceId = c.String(nullable: false, maxLength: 128),
|
||||
Deleted = c.Boolean(nullable: false),
|
||||
CreatedAtTimeUtc = c.DateTime(defaultValueSql: "GETUTCDATE()", nullable: false),
|
||||
})
|
||||
.PrimaryKey(t => t.Id)
|
||||
.ForeignKey("dbo.Assets", t => t.AssetId, cascadeDelete: true)
|
||||
.ForeignKey("dbo.TrackingDevices", t => t.TrackingDeviceId, cascadeDelete: true)
|
||||
.Index(t => t.AssetId)
|
||||
.Index(t => t.TrackingDeviceId);
|
||||
|
||||
}
|
||||
|
||||
public override void Down()
|
||||
{
|
||||
DropForeignKey("dbo.Trips", "TrackingDeviceId", "dbo.TrackingDevices");
|
||||
DropForeignKey("dbo.TrackingPoints", "TripId", "dbo.Trips");
|
||||
DropForeignKey("dbo.Trips", "AssetId", "dbo.Assets");
|
||||
DropForeignKey("dbo.TrackingPoints", "TrackingDeviceId", "dbo.TrackingDevices");
|
||||
DropForeignKey("dbo.TrackingPoints", "AssetId", "dbo.Assets");
|
||||
DropForeignKey("dbo.TrackingDevices", "AssetId", "dbo.Assets");
|
||||
DropIndex("dbo.Trips", new[] { "TrackingDeviceId" });
|
||||
DropIndex("dbo.Trips", new[] { "AssetId" });
|
||||
DropIndex("dbo.TrackingPoints", new[] { "TrackingDeviceId" });
|
||||
DropIndex("dbo.TrackingPoints", new[] { "AssetId" });
|
||||
DropIndex("dbo.TrackingPoints", new[] { "TripId" });
|
||||
DropIndex("dbo.TrackingDevices", new[] { "AssetId" });
|
||||
DropTable("dbo.Trips");
|
||||
DropTable("dbo.TrackingPoints");
|
||||
DropTable("dbo.TrackingDevices");
|
||||
DropTable("dbo.Assets");
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,126 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="Target" xml:space="preserve">
|
||||
<value>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</value>
|
||||
</data>
|
||||
<data name="DefaultSchema" xml:space="preserve">
|
||||
<value>dbo</value>
|
||||
</data>
|
||||
</root>
|
29
Backend/src/Trackable.EntityFramework/Migrations/201701190945492_ChangeTrackingPointDeviceTimeToStamp.Designer.cs
сгенерированный
Normal file
29
Backend/src/Trackable.EntityFramework/Migrations/201701190945492_ChangeTrackingPointDeviceTimeToStamp.Designer.cs
сгенерированный
Normal file
|
@ -0,0 +1,29 @@
|
|||
// <auto-generated />
|
||||
namespace Trackable.EntityFramework.Migrations
|
||||
{
|
||||
using System.CodeDom.Compiler;
|
||||
using System.Data.Entity.Migrations;
|
||||
using System.Data.Entity.Migrations.Infrastructure;
|
||||
using System.Resources;
|
||||
|
||||
[GeneratedCode("EntityFramework.Migrations", "6.1.3-40302")]
|
||||
public sealed partial class ChangeTrackingPointDeviceTimeToStamp : IMigrationMetadata
|
||||
{
|
||||
private readonly ResourceManager Resources = new ResourceManager(typeof(ChangeTrackingPointDeviceTimeToStamp));
|
||||
|
||||
string IMigrationMetadata.Id
|
||||
{
|
||||
get { return "201701190945492_ChangeTrackingPointDeviceTimeToStamp"; }
|
||||
}
|
||||
|
||||
string IMigrationMetadata.Source
|
||||
{
|
||||
get { return null; }
|
||||
}
|
||||
|
||||
string IMigrationMetadata.Target
|
||||
{
|
||||
get { return Resources.GetString("Target"); }
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,20 @@
|
|||
namespace Trackable.EntityFramework.Migrations
|
||||
{
|
||||
using System;
|
||||
using System.Data.Entity.Migrations;
|
||||
|
||||
public partial class ChangeTrackingPointDeviceTimeToStamp : DbMigration
|
||||
{
|
||||
public override void Up()
|
||||
{
|
||||
AddColumn("dbo.TrackingPoints", "DeviceTimestampUtc", c => c.Long(nullable: false));
|
||||
DropColumn("dbo.TrackingPoints", "DeviceTimeUtc");
|
||||
}
|
||||
|
||||
public override void Down()
|
||||
{
|
||||
AddColumn("dbo.TrackingPoints", "DeviceTimeUtc", c => c.DateTime(nullable: false));
|
||||
DropColumn("dbo.TrackingPoints", "DeviceTimestampUtc");
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,126 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="Target" xml:space="preserve">
|
||||
<value>H4sIAAAAAAAEAO1dW2/cNhZ+X2D/g6Cn7cId2U6x6BrjFs44LoxNYsNjF/sWcCR6LES3SpTXRrG/rA/9SfsXltSVV4mUNJ4ZxwhQZCjy4+HhuZE8p/nfH3/Of34KA+sRppkfR6f20ezQtmDkxp4frU/tHN1//6P9809//cv8gxc+Wb/W/d6RfnhklJ3aDwglJ46TuQ8wBNks9N00zuJ7NHPj0AFe7BwfHv7TOTpyIIawMZZlzW/yCPkhLH7gn4s4cmGCchB8ij0YZFU7/rIsUK3PIIRZAlx4at+mwP0KVgGcfcAY6Pkixd/+E6dfbess8AEmaAmDe9sCURQjgDC5J3cZXKI0jtbLBDeA4PY5gbjfPQgyWC3jpO2uu6LDY7Iipx1YQ7l5huLQEPDoXcUihx8+iNF2w0LMxJJRZNUFI0/tsyyD6BwgYFv8bCeLICU9Oxg9a4YfWMpOB42wYJkifw6sRR6gPIWnEcxRCoID6zpfBb77L/h8G3+F0WmUBwFNN6Ycf2MacNN1GicwRc838L5azaVnWw47zuEHNsOoMeUysWRgWbetT+DpI4zW6AFrwfGPtnXhP0GvbqlE5S7ysWrgQSjN8c/PmGCy9ua70znnOQwggs3E7+M4gCAyhlmkEGCYM3SLNegOuTUe3hBImiSA1PYuUZzCX2AEUwJyDRCCKZbQRRwmeUEcN/ln8Oivi6EcGcXOY86dw0ffxXPcwKDolj34SamDrZx84TtfpHF4Ewe0KHJ9vizjPCVdb+OejrcgXUPEEj53Wpnv1AQWa7hKiDhvumEi1OS/HbPiv2rN2j1J4Vw2Psv1Qxxtfi2vy5gUyj29DalNQ68NqY3NKBtyHfvRCK8qwLwGC3IZoXfHg4To0oPFmvsVgewgkdUMgTChZBjP/Y8fjDXiY+xWYVeJ8guM1ylIHnoJwT8ffQ+mL6D6q3w9VvHPXDfH0vXMbVT3oGUCIb+1PdMEeA9zDxoNeg9ByTqDMbepnwhi10MbsQbbcHas8XkLRTfnPQSb+qXq2zoPRRch/lT1k4WfI+NmcSq17+vrq7EOjXi6e0F+oliGnxQTFFNlLNXMJ8FR899H+ucSbKhbLke/eWMdb7xEIEWl6veagm6kD5E3Cc5NjI2JsTN/8w3fgG+obIzEJdBfJBaU+WxqL2trOM5iKoniLOqkbqmaossbSbuoqR1xl4O5H7t+QSR/rclTyPIAWxZL9/Kp1D3mIIp1EBt3P8HmHFN1ah/OZkcCnzXmaHxeO4fsNqpvsrlDMaKbP6poSEV6b2gkUk6dgVnC/97Bor7QSmcXjmzeeV5FpSWzztzyFn4BMhd4ouHC8uWxLdjfwpQ4PBAssApgD44JE52zH7l+AgK9VXDDNb07Ia+ZiP9yDhMYEcest186FDR+TySjmY3jXh+zRgmopiLrR8EbE9kptHsXhVi+rq1Is3xPdUgRo6otyTcTcqiFSx5/0KJUH2lMRFYatuyLcZUR/yJSKNuLfTClbCjZKxV8XNkvbD2Bj/KMP8oEj5MedpEvKT4sE/RsVnmjuV3x0XbAPYH/RLbrtXjZzuW8pFzumU8tj4J4DMIjYEqTQq4SzlfkE3xCkru+uwxW131ZdTPCSxuBXkJE2298Bm9Pn6KbFASWhWBZJMOSSasmaH1HoMSkrGovpJ/IkWpV5QCo3eEYJr0goLr3PevyImRwWG9W1e6dIJEG53IKTthH3iyw/NDglfJhQmSV1qnd6NwuWVktTB0M6zul97J/Ejb1i5bZIXLYMXIqDm5H9Nh7TxkH1ccUnYMKQ35hWTqZIj2WbEaauOvVjqXLwmatwHnY4rkYWVu+xnBBR5U0okCjOHAYdzapJvX1chNTNN/mTpl9XDXMHUWa8vwTSBI8N5W2XLVYyzJnefH90jyLNywxHDeTJPM21DYzoTgFa8h9JS8mHrzw06ywNytAnlkWXih0k0RQipChnpAJksQ9rCOJujv5OxesqfOKJfFnhYM7r0MSxhYPRLyRkI+1SBo5CEAqeRddxEEeRuqQWj26eSajIZpGfRzxnYwGFL+KyHOHY44QhgvbIZxq2M3V2npe5aaRAUlAbC4MOiCbkYoyj5UeX7boI1RJqjRE1aSPUaWg0hhV05t8G8u3MhIYI97t2Wy4dHdgbMrkiamWrHSI3/XR28RLGrNtNRD/JhOT0YCm1WTFRaolu8iiSR+jzbSkYdpWfaQq/ZKGqZoMqGkSMhlqmlZ9pCZLkwZqGvVx6ntOGkZ199mxrvq2nVmW6gq+ixr+Voulq+/Oq0uWvnmDSgL+qexodTM1xHyqhm7GalIpcYzmts36WE1SHI3UNOrjVElxNErV9KZx+6hx7OlWckSTHviNzmTCaPOgmxztZUJk9BChpaEdb68UDSPIU77UDDYgnZThM7nnF89zlxlJm2xSJjUWzd99iAIkXIHwXRrxba5CuCuPeXX90F++LdxHlF1sqw7PsGV8zhAMZ6TDbPlbsAh8rDBth08g8u9xhFkmUtvHh0fHXOn37pRhO1nmBZLrG2ktNrtrL5AOHj2C1H0AqZhVPC5leOWjydKFPdyKCu/WmxLcOeOYiuD93Zjy8oEF/VsInr6jkYxLZ0chMeWxo5D2QOrEGbnCgnanhffqy8iDT6f278XAE+vy31+qsQfWVYrt4Il1aP23S0JEHo4oaX1xHfCJze+tRjE2VKpi0ZW/LmYcWS26bgtMDNWCqx4dqRlUhegQveCrQznW6NDA1IoOGM9Xjg6A4OpIByCwVaUFgIaelqNYNTVc/MtZiVFVSUaE8SCTUrgHzsC8YPF1GF2hJrBl6LiawME4TE3gYJP9pqTfkJJOWW02SV2ZLHPQKA12otzqrkf7jdWEdL4O714qvlnZnaGcTJrO3JGstpXM/a1IV9fj7O4Ll2HJ3GD78arlbqCh2YoA7ldx265YtzqzfVBlyj7YMuUD6e6ZMLNStWmK03bDyhhs0pZsy14Voe2qS3t5Y7MtB2Yg0DtUQCZmSfN7KakNK3evqzysfNvEh9NVjPe+PHMqqhm6S8cUU8k6yebsy47vLDHrmZvq0zW1onxBVommnLD+JJ9HUk2w3To1sYhFVkvXa8G6Uyx2vBRtCmYIUqjIgt3bcrPBu711dk1WSTZOTlibwWb57WjZmBaxu7K/m6kUm1b4p5EBg2owMeUJhyXUv2uBg6PMX7cQJIkrgi4TkDR9LqP7uI6QOIrqLnxGBkTAw4s7S5F/D1yEP2PXnhXvnb+CICfPJeEKepfRVY6SHBFdClcBk3BO4quu+YuSN5bm+VVS/G/hplgCJtMn9/ZX0fvcD7yG7gvJtbwCggRu1V0/2UtE7vzXzw3SZ6HoRQVUsa+JN29hmAQYLLuKluARDqHtLoMf4Rq4z+3bvgqkfyNYts/PfbBOQZhVGO14/BPLsBc+/fR/dPyygd5lAAA=</value>
|
||||
</data>
|
||||
<data name="DefaultSchema" xml:space="preserve">
|
||||
<value>dbo</value>
|
||||
</data>
|
||||
</root>
|
29
Backend/src/Trackable.EntityFramework/Migrations/201701191420312_AddTrackingDeviceOperatingSystemAndVersion.Designer.cs
сгенерированный
Normal file
29
Backend/src/Trackable.EntityFramework/Migrations/201701191420312_AddTrackingDeviceOperatingSystemAndVersion.Designer.cs
сгенерированный
Normal file
|
@ -0,0 +1,29 @@
|
|||
// <auto-generated />
|
||||
namespace Trackable.EntityFramework.Migrations
|
||||
{
|
||||
using System.CodeDom.Compiler;
|
||||
using System.Data.Entity.Migrations;
|
||||
using System.Data.Entity.Migrations.Infrastructure;
|
||||
using System.Resources;
|
||||
|
||||
[GeneratedCode("EntityFramework.Migrations", "6.1.3-40302")]
|
||||
public sealed partial class AddTrackingDeviceOperatingSystemAndVersion : IMigrationMetadata
|
||||
{
|
||||
private readonly ResourceManager Resources = new ResourceManager(typeof(AddTrackingDeviceOperatingSystemAndVersion));
|
||||
|
||||
string IMigrationMetadata.Id
|
||||
{
|
||||
get { return "201701191420312_AddTrackingDeviceOperatingSystemAndVersion"; }
|
||||
}
|
||||
|
||||
string IMigrationMetadata.Source
|
||||
{
|
||||
get { return null; }
|
||||
}
|
||||
|
||||
string IMigrationMetadata.Target
|
||||
{
|
||||
get { return Resources.GetString("Target"); }
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,20 @@
|
|||
namespace Trackable.EntityFramework.Migrations
|
||||
{
|
||||
using System;
|
||||
using System.Data.Entity.Migrations;
|
||||
|
||||
public partial class AddTrackingDeviceOperatingSystemAndVersion : DbMigration
|
||||
{
|
||||
public override void Up()
|
||||
{
|
||||
AddColumn("dbo.TrackingDevices", "OperatingSystem", c => c.String());
|
||||
AddColumn("dbo.TrackingDevices", "Version", c => c.String());
|
||||
}
|
||||
|
||||
public override void Down()
|
||||
{
|
||||
DropColumn("dbo.TrackingDevices", "Version");
|
||||
DropColumn("dbo.TrackingDevices", "OperatingSystem");
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,126 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="Target" xml:space="preserve">
|
||||
<value>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</value>
|
||||
</data>
|
||||
<data name="DefaultSchema" xml:space="preserve">
|
||||
<value>dbo</value>
|
||||
</data>
|
||||
</root>
|
29
Backend/src/Trackable.EntityFramework/Migrations/201702091023341_AddTripsDestinationConfigs.Designer.cs
сгенерированный
Normal file
29
Backend/src/Trackable.EntityFramework/Migrations/201702091023341_AddTripsDestinationConfigs.Designer.cs
сгенерированный
Normal file
|
@ -0,0 +1,29 @@
|
|||
// <auto-generated />
|
||||
namespace Trackable.EntityFramework.Migrations
|
||||
{
|
||||
using System.CodeDom.Compiler;
|
||||
using System.Data.Entity.Migrations;
|
||||
using System.Data.Entity.Migrations.Infrastructure;
|
||||
using System.Resources;
|
||||
|
||||
[GeneratedCode("EntityFramework.Migrations", "6.1.3-40302")]
|
||||
public sealed partial class AddTripsDestinationConfigs : IMigrationMetadata
|
||||
{
|
||||
private readonly ResourceManager Resources = new ResourceManager(typeof(AddTripsDestinationConfigs));
|
||||
|
||||
string IMigrationMetadata.Id
|
||||
{
|
||||
get { return "201702091023341_AddTripsDestinationConfigs"; }
|
||||
}
|
||||
|
||||
string IMigrationMetadata.Source
|
||||
{
|
||||
get { return null; }
|
||||
}
|
||||
|
||||
string IMigrationMetadata.Target
|
||||
{
|
||||
get { return Resources.GetString("Target"); }
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,88 @@
|
|||
namespace Trackable.EntityFramework.Migrations
|
||||
{
|
||||
using System;
|
||||
using System.Data.Entity.Migrations;
|
||||
|
||||
public partial class AddTripsDestinationConfigs : DbMigration
|
||||
{
|
||||
public override void Up()
|
||||
{
|
||||
CreateTable(
|
||||
"dbo.Configurations",
|
||||
c => new
|
||||
{
|
||||
Key = c.String(nullable: false, maxLength: 128),
|
||||
Value = c.String(),
|
||||
Deleted = c.Boolean(nullable: false),
|
||||
CreatedAtTimeUtc = c.DateTime(defaultValueSql: "GETUTCDATE()", nullable: false),
|
||||
})
|
||||
.PrimaryKey(t => t.Key);
|
||||
|
||||
CreateTable(
|
||||
"dbo.Destinations",
|
||||
c => new
|
||||
{
|
||||
Id = c.Int(nullable: false, identity: true),
|
||||
Name = c.String(),
|
||||
Address = c.String(),
|
||||
Location = c.Geography(),
|
||||
MinimumWaitTime = c.Int(),
|
||||
InterestLevel = c.Int(),
|
||||
Deleted = c.Boolean(nullable: false),
|
||||
CreatedAtTimeUtc = c.DateTime(defaultValueSql: "GETUTCDATE()", nullable: false),
|
||||
})
|
||||
.PrimaryKey(t => t.Id);
|
||||
|
||||
CreateTable(
|
||||
"dbo.TripLegs",
|
||||
c => new
|
||||
{
|
||||
Id = c.Int(nullable: false, identity: true),
|
||||
StartTime = c.DateTime(nullable: false),
|
||||
EndTime = c.DateTime(nullable: false),
|
||||
Route = c.Geography(),
|
||||
AverageSpeed = c.Double(nullable: false),
|
||||
TripDataId = c.Int(nullable: false),
|
||||
StartDestinationId = c.Int(nullable: false),
|
||||
EndDestinationId = c.Int(nullable: false),
|
||||
Deleted = c.Boolean(nullable: false),
|
||||
CreatedAtTimeUtc = c.DateTime(defaultValueSql: "GETUTCDATE()", nullable: false),
|
||||
})
|
||||
.PrimaryKey(t => t.Id)
|
||||
.ForeignKey("dbo.Destinations", t => t.EndDestinationId)
|
||||
.ForeignKey("dbo.Destinations", t => t.StartDestinationId)
|
||||
.ForeignKey("dbo.Trips", t => t.TripDataId, cascadeDelete: true)
|
||||
.Index(t => t.TripDataId)
|
||||
.Index(t => t.StartDestinationId)
|
||||
.Index(t => t.EndDestinationId);
|
||||
|
||||
AddColumn("dbo.Trips", "StartDestinationId", c => c.Int(nullable: false));
|
||||
AddColumn("dbo.Trips", "EndDestinationId", c => c.Int(nullable: false));
|
||||
CreateIndex("dbo.Trips", "StartDestinationId");
|
||||
CreateIndex("dbo.Trips", "EndDestinationId");
|
||||
AddForeignKey("dbo.Trips", "EndDestinationId", "dbo.Destinations", "Id");
|
||||
AddForeignKey("dbo.Trips", "StartDestinationId", "dbo.Destinations", "Id");
|
||||
DropColumn("dbo.Trips", "Route");
|
||||
}
|
||||
|
||||
public override void Down()
|
||||
{
|
||||
AddColumn("dbo.Trips", "Route", c => c.Geography());
|
||||
DropForeignKey("dbo.TripLegs", "TripDataId", "dbo.Trips");
|
||||
DropForeignKey("dbo.TripLegs", "StartDestinationId", "dbo.Destinations");
|
||||
DropForeignKey("dbo.TripLegs", "EndDestinationId", "dbo.Destinations");
|
||||
DropForeignKey("dbo.Trips", "StartDestinationId", "dbo.Destinations");
|
||||
DropForeignKey("dbo.Trips", "EndDestinationId", "dbo.Destinations");
|
||||
DropIndex("dbo.TripLegs", new[] { "EndDestinationId" });
|
||||
DropIndex("dbo.TripLegs", new[] { "StartDestinationId" });
|
||||
DropIndex("dbo.TripLegs", new[] { "TripDataId" });
|
||||
DropIndex("dbo.Trips", new[] { "EndDestinationId" });
|
||||
DropIndex("dbo.Trips", new[] { "StartDestinationId" });
|
||||
DropColumn("dbo.Trips", "EndDestinationId");
|
||||
DropColumn("dbo.Trips", "StartDestinationId");
|
||||
DropTable("dbo.TripLegs");
|
||||
DropTable("dbo.Destinations");
|
||||
DropTable("dbo.Configurations");
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,126 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="Target" xml:space="preserve">
|
||||
<value>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</value>
|
||||
</data>
|
||||
<data name="DefaultSchema" xml:space="preserve">
|
||||
<value>dbo</value>
|
||||
</data>
|
||||
</root>
|
29
Backend/src/Trackable.EntityFramework/Migrations/201702120952233_RenameDestinationToLocation.Designer.cs
сгенерированный
Normal file
29
Backend/src/Trackable.EntityFramework/Migrations/201702120952233_RenameDestinationToLocation.Designer.cs
сгенерированный
Normal file
|
@ -0,0 +1,29 @@
|
|||
// <auto-generated />
|
||||
namespace Trackable.EntityFramework.Migrations
|
||||
{
|
||||
using System.CodeDom.Compiler;
|
||||
using System.Data.Entity.Migrations;
|
||||
using System.Data.Entity.Migrations.Infrastructure;
|
||||
using System.Resources;
|
||||
|
||||
[GeneratedCode("EntityFramework.Migrations", "6.1.3-40302")]
|
||||
public sealed partial class RenameDestinationToLocation : IMigrationMetadata
|
||||
{
|
||||
private readonly ResourceManager Resources = new ResourceManager(typeof(RenameDestinationToLocation));
|
||||
|
||||
string IMigrationMetadata.Id
|
||||
{
|
||||
get { return "201702120952233_RenameDestinationToLocation"; }
|
||||
}
|
||||
|
||||
string IMigrationMetadata.Source
|
||||
{
|
||||
get { return null; }
|
||||
}
|
||||
|
||||
string IMigrationMetadata.Target
|
||||
{
|
||||
get { return Resources.GetString("Target"); }
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,44 @@
|
|||
namespace Trackable.EntityFramework.Migrations
|
||||
{
|
||||
using System;
|
||||
using System.Data.Entity.Migrations;
|
||||
|
||||
public partial class RenameDestinationToLocation : DbMigration
|
||||
{
|
||||
public override void Up()
|
||||
{
|
||||
RenameTable(name: "dbo.Destinations", newName: "Locations");
|
||||
RenameColumn(table: "dbo.Trips", name: "EndDestinationId", newName: "EndLocationId");
|
||||
RenameColumn(table: "dbo.Trips", name: "StartDestinationId", newName: "StartLocationId");
|
||||
RenameColumn(table: "dbo.TripLegs", name: "EndDestinationId", newName: "EndLocationId");
|
||||
RenameColumn(table: "dbo.TripLegs", name: "StartDestinationId", newName: "StartLocationId");
|
||||
RenameIndex(table: "dbo.Trips", name: "IX_StartDestinationId", newName: "IX_StartLocationId");
|
||||
RenameIndex(table: "dbo.Trips", name: "IX_EndDestinationId", newName: "IX_EndLocationId");
|
||||
RenameIndex(table: "dbo.TripLegs", name: "IX_StartDestinationId", newName: "IX_StartLocationId");
|
||||
RenameIndex(table: "dbo.TripLegs", name: "IX_EndDestinationId", newName: "IX_EndLocationId");
|
||||
DropPrimaryKey("dbo.Configurations");
|
||||
AddColumn("dbo.Configurations", "Id", c => c.String(nullable: false, maxLength: 128));
|
||||
AddColumn("dbo.Configurations", "Namespace", c => c.String(nullable: false, maxLength: 128));
|
||||
AddPrimaryKey("dbo.Configurations", new[] { "Id", "Namespace" });
|
||||
DropColumn("dbo.Configurations", "Key");
|
||||
}
|
||||
|
||||
public override void Down()
|
||||
{
|
||||
AddColumn("dbo.Configurations", "Key", c => c.String(nullable: false, maxLength: 128));
|
||||
DropPrimaryKey("dbo.Configurations");
|
||||
DropColumn("dbo.Configurations", "Namespace");
|
||||
DropColumn("dbo.Configurations", "Id");
|
||||
AddPrimaryKey("dbo.Configurations", "Key");
|
||||
RenameIndex(table: "dbo.TripLegs", name: "IX_EndLocationId", newName: "IX_EndDestinationId");
|
||||
RenameIndex(table: "dbo.TripLegs", name: "IX_StartLocationId", newName: "IX_StartDestinationId");
|
||||
RenameIndex(table: "dbo.Trips", name: "IX_EndLocationId", newName: "IX_EndDestinationId");
|
||||
RenameIndex(table: "dbo.Trips", name: "IX_StartLocationId", newName: "IX_StartDestinationId");
|
||||
RenameColumn(table: "dbo.TripLegs", name: "StartLocationId", newName: "StartDestinationId");
|
||||
RenameColumn(table: "dbo.TripLegs", name: "EndLocationId", newName: "EndDestinationId");
|
||||
RenameColumn(table: "dbo.Trips", name: "StartLocationId", newName: "StartDestinationId");
|
||||
RenameColumn(table: "dbo.Trips", name: "EndLocationId", newName: "EndDestinationId");
|
||||
RenameTable(name: "dbo.Locations", newName: "Destinations");
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,126 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="Target" xml:space="preserve">
|
||||
<value>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</value>
|
||||
</data>
|
||||
<data name="DefaultSchema" xml:space="preserve">
|
||||
<value>dbo</value>
|
||||
</data>
|
||||
</root>
|
29
Backend/src/Trackable.EntityFramework/Migrations/201702121151433_CompositeKeyEntityBase.Designer.cs
сгенерированный
Normal file
29
Backend/src/Trackable.EntityFramework/Migrations/201702121151433_CompositeKeyEntityBase.Designer.cs
сгенерированный
Normal file
|
@ -0,0 +1,29 @@
|
|||
// <auto-generated />
|
||||
namespace Trackable.EntityFramework.Migrations
|
||||
{
|
||||
using System.CodeDom.Compiler;
|
||||
using System.Data.Entity.Migrations;
|
||||
using System.Data.Entity.Migrations.Infrastructure;
|
||||
using System.Resources;
|
||||
|
||||
[GeneratedCode("EntityFramework.Migrations", "6.1.3-40302")]
|
||||
public sealed partial class CompositeKeyEntityBase : IMigrationMetadata
|
||||
{
|
||||
private readonly ResourceManager Resources = new ResourceManager(typeof(CompositeKeyEntityBase));
|
||||
|
||||
string IMigrationMetadata.Id
|
||||
{
|
||||
get { return "201702121151433_CompositeKeyEntityBase"; }
|
||||
}
|
||||
|
||||
string IMigrationMetadata.Source
|
||||
{
|
||||
get { return null; }
|
||||
}
|
||||
|
||||
string IMigrationMetadata.Target
|
||||
{
|
||||
get { return Resources.GetString("Target"); }
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,28 @@
|
|||
namespace Trackable.EntityFramework.Migrations
|
||||
{
|
||||
using System;
|
||||
using System.Data.Entity.Migrations;
|
||||
|
||||
public partial class CompositeKeyEntityBase : DbMigration
|
||||
{
|
||||
public override void Up()
|
||||
{
|
||||
DropPrimaryKey("dbo.Configurations");
|
||||
AddColumn("dbo.Configurations", "Key1", c => c.String(nullable: false, maxLength: 128));
|
||||
AddColumn("dbo.Configurations", "Key2", c => c.String(nullable: false, maxLength: 128));
|
||||
AddPrimaryKey("dbo.Configurations", new[] { "Key1", "Key2" });
|
||||
DropColumn("dbo.Configurations", "Id");
|
||||
DropColumn("dbo.Configurations", "Namespace");
|
||||
}
|
||||
|
||||
public override void Down()
|
||||
{
|
||||
AddColumn("dbo.Configurations", "Namespace", c => c.String(nullable: false, maxLength: 128));
|
||||
AddColumn("dbo.Configurations", "Id", c => c.String(nullable: false, maxLength: 128));
|
||||
DropPrimaryKey("dbo.Configurations");
|
||||
DropColumn("dbo.Configurations", "Key2");
|
||||
DropColumn("dbo.Configurations", "Key1");
|
||||
AddPrimaryKey("dbo.Configurations", new[] { "Id", "Namespace" });
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,126 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="Target" xml:space="preserve">
|
||||
<value>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</value>
|
||||
</data>
|
||||
<data name="DefaultSchema" xml:space="preserve">
|
||||
<value>dbo</value>
|
||||
</data>
|
||||
</root>
|
29
Backend/src/Trackable.EntityFramework/Migrations/201702121521460_RenameDateTimes.Designer.cs
сгенерированный
Normal file
29
Backend/src/Trackable.EntityFramework/Migrations/201702121521460_RenameDateTimes.Designer.cs
сгенерированный
Normal file
|
@ -0,0 +1,29 @@
|
|||
// <auto-generated />
|
||||
namespace Trackable.EntityFramework.Migrations
|
||||
{
|
||||
using System.CodeDom.Compiler;
|
||||
using System.Data.Entity.Migrations;
|
||||
using System.Data.Entity.Migrations.Infrastructure;
|
||||
using System.Resources;
|
||||
|
||||
[GeneratedCode("EntityFramework.Migrations", "6.1.3-40302")]
|
||||
public sealed partial class RenameDateTimes : IMigrationMetadata
|
||||
{
|
||||
private readonly ResourceManager Resources = new ResourceManager(typeof(RenameDateTimes));
|
||||
|
||||
string IMigrationMetadata.Id
|
||||
{
|
||||
get { return "201702121521460_RenameDateTimes"; }
|
||||
}
|
||||
|
||||
string IMigrationMetadata.Source
|
||||
{
|
||||
get { return null; }
|
||||
}
|
||||
|
||||
string IMigrationMetadata.Target
|
||||
{
|
||||
get { return Resources.GetString("Target"); }
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,32 @@
|
|||
namespace Trackable.EntityFramework.Migrations
|
||||
{
|
||||
using System;
|
||||
using System.Data.Entity.Migrations;
|
||||
|
||||
public partial class RenameDateTimes : DbMigration
|
||||
{
|
||||
public override void Up()
|
||||
{
|
||||
AddColumn("dbo.Trips", "StartTimeUtc", c => c.DateTime(nullable: false));
|
||||
AddColumn("dbo.Trips", "EndTimeUtc", c => c.DateTime(nullable: false));
|
||||
AddColumn("dbo.TripLegs", "StartTimeUtc", c => c.DateTime(nullable: false));
|
||||
AddColumn("dbo.TripLegs", "EndTimeUtc", c => c.DateTime(nullable: false));
|
||||
DropColumn("dbo.Trips", "StartTime");
|
||||
DropColumn("dbo.Trips", "EndTime");
|
||||
DropColumn("dbo.TripLegs", "StartTime");
|
||||
DropColumn("dbo.TripLegs", "EndTime");
|
||||
}
|
||||
|
||||
public override void Down()
|
||||
{
|
||||
AddColumn("dbo.TripLegs", "EndTime", c => c.DateTime(nullable: false));
|
||||
AddColumn("dbo.TripLegs", "StartTime", c => c.DateTime(nullable: false));
|
||||
AddColumn("dbo.Trips", "EndTime", c => c.DateTime(nullable: false));
|
||||
AddColumn("dbo.Trips", "StartTime", c => c.DateTime(nullable: false));
|
||||
DropColumn("dbo.TripLegs", "EndTimeUtc");
|
||||
DropColumn("dbo.TripLegs", "StartTimeUtc");
|
||||
DropColumn("dbo.Trips", "EndTimeUtc");
|
||||
DropColumn("dbo.Trips", "StartTimeUtc");
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,126 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="Target" xml:space="preserve">
|
||||
<value>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</value>
|
||||
</data>
|
||||
<data name="DefaultSchema" xml:space="preserve">
|
||||
<value>dbo</value>
|
||||
</data>
|
||||
</root>
|
29
Backend/src/Trackable.EntityFramework/Migrations/201702150750048_FixTrackingPointDataTypes.Designer.cs
сгенерированный
Normal file
29
Backend/src/Trackable.EntityFramework/Migrations/201702150750048_FixTrackingPointDataTypes.Designer.cs
сгенерированный
Normal file
|
@ -0,0 +1,29 @@
|
|||
// <auto-generated />
|
||||
namespace Trackable.EntityFramework.Migrations
|
||||
{
|
||||
using System.CodeDom.Compiler;
|
||||
using System.Data.Entity.Migrations;
|
||||
using System.Data.Entity.Migrations.Infrastructure;
|
||||
using System.Resources;
|
||||
|
||||
[GeneratedCode("EntityFramework.Migrations", "6.1.3-40302")]
|
||||
public sealed partial class FixTrackingPointDataTypes : IMigrationMetadata
|
||||
{
|
||||
private readonly ResourceManager Resources = new ResourceManager(typeof(FixTrackingPointDataTypes));
|
||||
|
||||
string IMigrationMetadata.Id
|
||||
{
|
||||
get { return "201702150750048_FixTrackingPointDataTypes"; }
|
||||
}
|
||||
|
||||
string IMigrationMetadata.Source
|
||||
{
|
||||
get { return null; }
|
||||
}
|
||||
|
||||
string IMigrationMetadata.Target
|
||||
{
|
||||
get { return Resources.GetString("Target"); }
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,26 @@
|
|||
namespace Trackable.EntityFramework.Migrations
|
||||
{
|
||||
using System;
|
||||
using System.Data.Entity.Migrations;
|
||||
|
||||
public partial class FixTrackingPointDataTypes : DbMigration
|
||||
{
|
||||
public override void Up()
|
||||
{
|
||||
AddColumn("dbo.TrackingPoints", "LocationProvider", c => c.Int(nullable: false));
|
||||
AlterColumn("dbo.TrackingPoints", "Accuracy", c => c.Double());
|
||||
AlterColumn("dbo.TrackingPoints", "Speed", c => c.Double());
|
||||
AlterColumn("dbo.TrackingPoints", "Altitude", c => c.Double());
|
||||
AlterColumn("dbo.TrackingPoints", "Bearing", c => c.Double());
|
||||
}
|
||||
|
||||
public override void Down()
|
||||
{
|
||||
AlterColumn("dbo.TrackingPoints", "Bearing", c => c.Int());
|
||||
AlterColumn("dbo.TrackingPoints", "Altitude", c => c.Int());
|
||||
AlterColumn("dbo.TrackingPoints", "Speed", c => c.Int());
|
||||
AlterColumn("dbo.TrackingPoints", "Accuracy", c => c.Int());
|
||||
DropColumn("dbo.TrackingPoints", "LocationProvider");
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,126 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="Target" xml:space="preserve">
|
||||
<value>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</value>
|
||||
</data>
|
||||
<data name="DefaultSchema" xml:space="preserve">
|
||||
<value>dbo</value>
|
||||
</data>
|
||||
</root>
|
29
Backend/src/Trackable.EntityFramework/Migrations/201703061411479_AddDescriptionToConfiguration.Designer.cs
сгенерированный
Normal file
29
Backend/src/Trackable.EntityFramework/Migrations/201703061411479_AddDescriptionToConfiguration.Designer.cs
сгенерированный
Normal file
|
@ -0,0 +1,29 @@
|
|||
// <auto-generated />
|
||||
namespace Trackable.EntityFramework.Migrations
|
||||
{
|
||||
using System.CodeDom.Compiler;
|
||||
using System.Data.Entity.Migrations;
|
||||
using System.Data.Entity.Migrations.Infrastructure;
|
||||
using System.Resources;
|
||||
|
||||
[GeneratedCode("EntityFramework.Migrations", "6.1.3-40302")]
|
||||
public sealed partial class AddDescriptionToConfiguration : IMigrationMetadata
|
||||
{
|
||||
private readonly ResourceManager Resources = new ResourceManager(typeof(AddDescriptionToConfiguration));
|
||||
|
||||
string IMigrationMetadata.Id
|
||||
{
|
||||
get { return "201703061411479_AddDescriptionToConfiguration"; }
|
||||
}
|
||||
|
||||
string IMigrationMetadata.Source
|
||||
{
|
||||
get { return null; }
|
||||
}
|
||||
|
||||
string IMigrationMetadata.Target
|
||||
{
|
||||
get { return Resources.GetString("Target"); }
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,18 @@
|
|||
namespace Trackable.EntityFramework.Migrations
|
||||
{
|
||||
using System;
|
||||
using System.Data.Entity.Migrations;
|
||||
|
||||
public partial class AddDescriptionToConfiguration : DbMigration
|
||||
{
|
||||
public override void Up()
|
||||
{
|
||||
AddColumn("dbo.Configurations", "Description", c => c.String());
|
||||
}
|
||||
|
||||
public override void Down()
|
||||
{
|
||||
DropColumn("dbo.Configurations", "Description");
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,126 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="Target" xml:space="preserve">
|
||||
<value>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</value>
|
||||
</data>
|
||||
<data name="DefaultSchema" xml:space="preserve">
|
||||
<value>dbo</value>
|
||||
</data>
|
||||
</root>
|
29
Backend/src/Trackable.EntityFramework/Migrations/201704091456404_AddAuthorization.Designer.cs
сгенерированный
Normal file
29
Backend/src/Trackable.EntityFramework/Migrations/201704091456404_AddAuthorization.Designer.cs
сгенерированный
Normal file
|
@ -0,0 +1,29 @@
|
|||
// <auto-generated />
|
||||
namespace Trackable.EntityFramework.Migrations
|
||||
{
|
||||
using System.CodeDom.Compiler;
|
||||
using System.Data.Entity.Migrations;
|
||||
using System.Data.Entity.Migrations.Infrastructure;
|
||||
using System.Resources;
|
||||
|
||||
[GeneratedCode("EntityFramework.Migrations", "6.1.3-40302")]
|
||||
public sealed partial class AddAuthorization : IMigrationMetadata
|
||||
{
|
||||
private readonly ResourceManager Resources = new ResourceManager(typeof(AddAuthorization));
|
||||
|
||||
string IMigrationMetadata.Id
|
||||
{
|
||||
get { return "201704091456404_AddAuthorization"; }
|
||||
}
|
||||
|
||||
string IMigrationMetadata.Source
|
||||
{
|
||||
get { return null; }
|
||||
}
|
||||
|
||||
string IMigrationMetadata.Target
|
||||
{
|
||||
get { return Resources.GetString("Target"); }
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,46 @@
|
|||
namespace Trackable.EntityFramework.Migrations
|
||||
{
|
||||
using System;
|
||||
using System.Data.Entity.Migrations;
|
||||
|
||||
public partial class AddAuthorization : DbMigration
|
||||
{
|
||||
public override void Up()
|
||||
{
|
||||
CreateTable(
|
||||
"dbo.Roles",
|
||||
c => new
|
||||
{
|
||||
Id = c.Guid(nullable: false),
|
||||
Deleted = c.Boolean(nullable: false),
|
||||
CreatedAtTimeUtc = c.DateTime(defaultValueSql: "GETUTCDATE()", nullable: false),
|
||||
})
|
||||
.PrimaryKey(t => t.Id);
|
||||
|
||||
CreateTable(
|
||||
"dbo.Users",
|
||||
c => new
|
||||
{
|
||||
Id = c.Guid(nullable: false),
|
||||
Email = c.String(),
|
||||
Name = c.String(),
|
||||
ClaimsId = c.String(),
|
||||
Deleted = c.Boolean(nullable: false),
|
||||
CreatedAtTimeUtc = c.DateTime(defaultValueSql: "GETUTCDATE()", nullable: false),
|
||||
Role_Id = c.Guid(),
|
||||
})
|
||||
.PrimaryKey(t => t.Id)
|
||||
.ForeignKey("dbo.Roles", t => t.Role_Id)
|
||||
.Index(t => t.Role_Id);
|
||||
|
||||
}
|
||||
|
||||
public override void Down()
|
||||
{
|
||||
DropForeignKey("dbo.Users", "Role_Id", "dbo.Roles");
|
||||
DropIndex("dbo.Users", new[] { "Role_Id" });
|
||||
DropTable("dbo.Users");
|
||||
DropTable("dbo.Roles");
|
||||
}
|
||||
}
|
||||
}
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
29
Backend/src/Trackable.EntityFramework/Migrations/201704091527485_AddRoleNameColumn.Designer.cs
сгенерированный
Normal file
29
Backend/src/Trackable.EntityFramework/Migrations/201704091527485_AddRoleNameColumn.Designer.cs
сгенерированный
Normal file
|
@ -0,0 +1,29 @@
|
|||
// <auto-generated />
|
||||
namespace Trackable.EntityFramework.Migrations
|
||||
{
|
||||
using System.CodeDom.Compiler;
|
||||
using System.Data.Entity.Migrations;
|
||||
using System.Data.Entity.Migrations.Infrastructure;
|
||||
using System.Resources;
|
||||
|
||||
[GeneratedCode("EntityFramework.Migrations", "6.1.3-40302")]
|
||||
public sealed partial class AddRoleNameColumn : IMigrationMetadata
|
||||
{
|
||||
private readonly ResourceManager Resources = new ResourceManager(typeof(AddRoleNameColumn));
|
||||
|
||||
string IMigrationMetadata.Id
|
||||
{
|
||||
get { return "201704091527485_AddRoleNameColumn"; }
|
||||
}
|
||||
|
||||
string IMigrationMetadata.Source
|
||||
{
|
||||
get { return null; }
|
||||
}
|
||||
|
||||
string IMigrationMetadata.Target
|
||||
{
|
||||
get { return Resources.GetString("Target"); }
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,18 @@
|
|||
namespace Trackable.EntityFramework.Migrations
|
||||
{
|
||||
using System;
|
||||
using System.Data.Entity.Migrations;
|
||||
|
||||
public partial class AddRoleNameColumn : DbMigration
|
||||
{
|
||||
public override void Up()
|
||||
{
|
||||
AddColumn("dbo.Roles", "Name", c => c.String());
|
||||
}
|
||||
|
||||
public override void Down()
|
||||
{
|
||||
DropColumn("dbo.Roles", "Name");
|
||||
}
|
||||
}
|
||||
}
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
29
Backend/src/Trackable.EntityFramework/Migrations/201704131512215_AddConstraintsOnEmailColumn.Designer.cs
сгенерированный
Normal file
29
Backend/src/Trackable.EntityFramework/Migrations/201704131512215_AddConstraintsOnEmailColumn.Designer.cs
сгенерированный
Normal file
|
@ -0,0 +1,29 @@
|
|||
// <auto-generated />
|
||||
namespace Trackable.EntityFramework.Migrations
|
||||
{
|
||||
using System.CodeDom.Compiler;
|
||||
using System.Data.Entity.Migrations;
|
||||
using System.Data.Entity.Migrations.Infrastructure;
|
||||
using System.Resources;
|
||||
|
||||
[GeneratedCode("EntityFramework.Migrations", "6.1.3-40302")]
|
||||
public sealed partial class AddConstraintsOnEmailColumn : IMigrationMetadata
|
||||
{
|
||||
private readonly ResourceManager Resources = new ResourceManager(typeof(AddConstraintsOnEmailColumn));
|
||||
|
||||
string IMigrationMetadata.Id
|
||||
{
|
||||
get { return "201704131512215_AddConstraintsOnEmailColumn"; }
|
||||
}
|
||||
|
||||
string IMigrationMetadata.Source
|
||||
{
|
||||
get { return null; }
|
||||
}
|
||||
|
||||
string IMigrationMetadata.Target
|
||||
{
|
||||
get { return Resources.GetString("Target"); }
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,20 @@
|
|||
namespace Trackable.EntityFramework.Migrations
|
||||
{
|
||||
using System;
|
||||
using System.Data.Entity.Migrations;
|
||||
|
||||
public partial class AddConstraintsOnEmailColumn : DbMigration
|
||||
{
|
||||
public override void Up()
|
||||
{
|
||||
AlterColumn("dbo.Users", "Email", c => c.String(nullable: false, maxLength: 450));
|
||||
CreateIndex("dbo.Users", "Email", unique: true);
|
||||
}
|
||||
|
||||
public override void Down()
|
||||
{
|
||||
DropIndex("dbo.Users", new[] { "Email" });
|
||||
AlterColumn("dbo.Users", "Email", c => c.String());
|
||||
}
|
||||
}
|
||||
}
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
29
Backend/src/Trackable.EntityFramework/Migrations/201705010937090_AddGeoFencesAndNotificationUpdates.Designer.cs
сгенерированный
Normal file
29
Backend/src/Trackable.EntityFramework/Migrations/201705010937090_AddGeoFencesAndNotificationUpdates.Designer.cs
сгенерированный
Normal file
|
@ -0,0 +1,29 @@
|
|||
// <auto-generated />
|
||||
namespace Trackable.EntityFramework.Migrations
|
||||
{
|
||||
using System.CodeDom.Compiler;
|
||||
using System.Data.Entity.Migrations;
|
||||
using System.Data.Entity.Migrations.Infrastructure;
|
||||
using System.Resources;
|
||||
|
||||
[GeneratedCode("EntityFramework.Migrations", "6.1.3-40302")]
|
||||
public sealed partial class AddGeoFencesAndNotificationUpdates : IMigrationMetadata
|
||||
{
|
||||
private readonly ResourceManager Resources = new ResourceManager(typeof(AddGeoFencesAndNotificationUpdates));
|
||||
|
||||
string IMigrationMetadata.Id
|
||||
{
|
||||
get { return "201705010937090_AddGeoFencesAndNotificationUpdates"; }
|
||||
}
|
||||
|
||||
string IMigrationMetadata.Source
|
||||
{
|
||||
get { return null; }
|
||||
}
|
||||
|
||||
string IMigrationMetadata.Target
|
||||
{
|
||||
get { return Resources.GetString("Target"); }
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,53 @@
|
|||
namespace Trackable.EntityFramework.Migrations
|
||||
{
|
||||
using System;
|
||||
using System.Data.Entity.Migrations;
|
||||
|
||||
public partial class AddGeoFencesAndNotificationUpdates : DbMigration
|
||||
{
|
||||
public override void Up()
|
||||
{
|
||||
CreateTable(
|
||||
"dbo.NotificationUpdates",
|
||||
c => new
|
||||
{
|
||||
Id = c.Int(nullable: false, identity: true),
|
||||
GeoFenceDataId = c.Int(nullable: false),
|
||||
AssetDataId = c.String(maxLength: 128),
|
||||
Status = c.Int(nullable: false),
|
||||
Deleted = c.Boolean(nullable: false),
|
||||
CreatedAtTimeUtc = c.DateTime(defaultValueSql: "GETUTCDATE()", nullable: false),
|
||||
})
|
||||
.PrimaryKey(t => t.Id)
|
||||
.ForeignKey("dbo.Assets", t => t.AssetDataId)
|
||||
.ForeignKey("dbo.GeoFences", t => t.GeoFenceDataId, cascadeDelete: true)
|
||||
.Index(t => t.GeoFenceDataId)
|
||||
.Index(t => t.AssetDataId);
|
||||
|
||||
CreateTable(
|
||||
"dbo.GeoFences",
|
||||
c => new
|
||||
{
|
||||
Id = c.Int(nullable: false, identity: true),
|
||||
Email = c.String(),
|
||||
FenceType = c.Int(nullable: false),
|
||||
CooldownInSeconds = c.Long(nullable: false),
|
||||
Polygon = c.Geography(),
|
||||
Deleted = c.Boolean(nullable: false),
|
||||
CreatedAtTimeUtc = c.DateTime(defaultValueSql: "GETUTCDATE()", nullable: false),
|
||||
})
|
||||
.PrimaryKey(t => t.Id);
|
||||
|
||||
}
|
||||
|
||||
public override void Down()
|
||||
{
|
||||
DropForeignKey("dbo.NotificationUpdates", "GeoFenceDataId", "dbo.GeoFences");
|
||||
DropForeignKey("dbo.NotificationUpdates", "AssetDataId", "dbo.Assets");
|
||||
DropIndex("dbo.NotificationUpdates", new[] { "AssetDataId" });
|
||||
DropIndex("dbo.NotificationUpdates", new[] { "GeoFenceDataId" });
|
||||
DropTable("dbo.GeoFences");
|
||||
DropTable("dbo.NotificationUpdates");
|
||||
}
|
||||
}
|
||||
}
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
29
Backend/src/Trackable.EntityFramework/Migrations/201705010947149_AddAssetIdsToGeoFence.Designer.cs
сгенерированный
Normal file
29
Backend/src/Trackable.EntityFramework/Migrations/201705010947149_AddAssetIdsToGeoFence.Designer.cs
сгенерированный
Normal file
|
@ -0,0 +1,29 @@
|
|||
// <auto-generated />
|
||||
namespace Trackable.EntityFramework.Migrations
|
||||
{
|
||||
using System.CodeDom.Compiler;
|
||||
using System.Data.Entity.Migrations;
|
||||
using System.Data.Entity.Migrations.Infrastructure;
|
||||
using System.Resources;
|
||||
|
||||
[GeneratedCode("EntityFramework.Migrations", "6.1.3-40302")]
|
||||
public sealed partial class AddAssetIdsToGeoFence : IMigrationMetadata
|
||||
{
|
||||
private readonly ResourceManager Resources = new ResourceManager(typeof(AddAssetIdsToGeoFence));
|
||||
|
||||
string IMigrationMetadata.Id
|
||||
{
|
||||
get { return "201705010947149_AddAssetIdsToGeoFence"; }
|
||||
}
|
||||
|
||||
string IMigrationMetadata.Source
|
||||
{
|
||||
get { return null; }
|
||||
}
|
||||
|
||||
string IMigrationMetadata.Target
|
||||
{
|
||||
get { return Resources.GetString("Target"); }
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,18 @@
|
|||
namespace Trackable.EntityFramework.Migrations
|
||||
{
|
||||
using System;
|
||||
using System.Data.Entity.Migrations;
|
||||
|
||||
public partial class AddAssetIdsToGeoFence : DbMigration
|
||||
{
|
||||
public override void Up()
|
||||
{
|
||||
AddColumn("dbo.GeoFences", "AssetIds", c => c.String());
|
||||
}
|
||||
|
||||
public override void Down()
|
||||
{
|
||||
DropColumn("dbo.GeoFences", "AssetIds");
|
||||
}
|
||||
}
|
||||
}
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
29
Backend/src/Trackable.EntityFramework/Migrations/201705021036277_AddNameToGeoFenceMakeNonNull.Designer.cs
сгенерированный
Normal file
29
Backend/src/Trackable.EntityFramework/Migrations/201705021036277_AddNameToGeoFenceMakeNonNull.Designer.cs
сгенерированный
Normal file
|
@ -0,0 +1,29 @@
|
|||
// <auto-generated />
|
||||
namespace Trackable.EntityFramework.Migrations
|
||||
{
|
||||
using System.CodeDom.Compiler;
|
||||
using System.Data.Entity.Migrations;
|
||||
using System.Data.Entity.Migrations.Infrastructure;
|
||||
using System.Resources;
|
||||
|
||||
[GeneratedCode("EntityFramework.Migrations", "6.1.3-40302")]
|
||||
public sealed partial class AddNameToGeoFenceMakeNonNull : IMigrationMetadata
|
||||
{
|
||||
private readonly ResourceManager Resources = new ResourceManager(typeof(AddNameToGeoFenceMakeNonNull));
|
||||
|
||||
string IMigrationMetadata.Id
|
||||
{
|
||||
get { return "201705021036277_AddNameToGeoFenceMakeNonNull"; }
|
||||
}
|
||||
|
||||
string IMigrationMetadata.Source
|
||||
{
|
||||
get { return null; }
|
||||
}
|
||||
|
||||
string IMigrationMetadata.Target
|
||||
{
|
||||
get { return Resources.GetString("Target"); }
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,32 @@
|
|||
namespace Trackable.EntityFramework.Migrations
|
||||
{
|
||||
using System;
|
||||
using System.Data.Entity.Migrations;
|
||||
|
||||
public partial class AddNameToGeoFenceMakeNonNull : DbMigration
|
||||
{
|
||||
public override void Up()
|
||||
{
|
||||
DropForeignKey("dbo.NotificationUpdates", "AssetDataId", "dbo.Assets");
|
||||
DropIndex("dbo.NotificationUpdates", new[] { "AssetDataId" });
|
||||
AddColumn("dbo.GeoFences", "Name", c => c.String(nullable: false));
|
||||
AlterColumn("dbo.NotificationUpdates", "AssetDataId", c => c.String(nullable: false, maxLength: 128));
|
||||
AlterColumn("dbo.GeoFences", "Email", c => c.String(nullable: false));
|
||||
AlterColumn("dbo.GeoFences", "AssetIds", c => c.String(nullable: false));
|
||||
CreateIndex("dbo.NotificationUpdates", "AssetDataId");
|
||||
AddForeignKey("dbo.NotificationUpdates", "AssetDataId", "dbo.Assets", "Id", cascadeDelete: true);
|
||||
}
|
||||
|
||||
public override void Down()
|
||||
{
|
||||
DropForeignKey("dbo.NotificationUpdates", "AssetDataId", "dbo.Assets");
|
||||
DropIndex("dbo.NotificationUpdates", new[] { "AssetDataId" });
|
||||
AlterColumn("dbo.GeoFences", "AssetIds", c => c.String());
|
||||
AlterColumn("dbo.GeoFences", "Email", c => c.String());
|
||||
AlterColumn("dbo.NotificationUpdates", "AssetDataId", c => c.String(maxLength: 128));
|
||||
DropColumn("dbo.GeoFences", "Name");
|
||||
CreateIndex("dbo.NotificationUpdates", "AssetDataId");
|
||||
AddForeignKey("dbo.NotificationUpdates", "AssetDataId", "dbo.Assets", "Id");
|
||||
}
|
||||
}
|
||||
}
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
29
Backend/src/Trackable.EntityFramework/Migrations/201705031253065_ModifyGeoFenceAddThroughTable.Designer.cs
сгенерированный
Normal file
29
Backend/src/Trackable.EntityFramework/Migrations/201705031253065_ModifyGeoFenceAddThroughTable.Designer.cs
сгенерированный
Normal file
|
@ -0,0 +1,29 @@
|
|||
// <auto-generated />
|
||||
namespace Trackable.EntityFramework.Migrations
|
||||
{
|
||||
using System.CodeDom.Compiler;
|
||||
using System.Data.Entity.Migrations;
|
||||
using System.Data.Entity.Migrations.Infrastructure;
|
||||
using System.Resources;
|
||||
|
||||
[GeneratedCode("EntityFramework.Migrations", "6.1.3-40302")]
|
||||
public sealed partial class ModifyGeoFenceAddThroughTable : IMigrationMetadata
|
||||
{
|
||||
private readonly ResourceManager Resources = new ResourceManager(typeof(ModifyGeoFenceAddThroughTable));
|
||||
|
||||
string IMigrationMetadata.Id
|
||||
{
|
||||
get { return "201705031253065_ModifyGeoFenceAddThroughTable"; }
|
||||
}
|
||||
|
||||
string IMigrationMetadata.Source
|
||||
{
|
||||
get { return null; }
|
||||
}
|
||||
|
||||
string IMigrationMetadata.Target
|
||||
{
|
||||
get { return Resources.GetString("Target"); }
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,46 @@
|
|||
namespace Trackable.EntityFramework.Migrations
|
||||
{
|
||||
using System;
|
||||
using System.Data.Entity.Migrations;
|
||||
|
||||
public partial class ModifyGeoFenceAddThroughTable : DbMigration
|
||||
{
|
||||
public override void Up()
|
||||
{
|
||||
RenameTable(name: "dbo.NotificationUpdates", newName: "GeoFenceUpdates");
|
||||
CreateTable(
|
||||
"dbo.GeoFenceDataAssetDatas",
|
||||
c => new
|
||||
{
|
||||
GeoFenceData_Id = c.Int(nullable: false),
|
||||
AssetData_Id = c.String(nullable: false, maxLength: 128),
|
||||
})
|
||||
.PrimaryKey(t => new { t.GeoFenceData_Id, t.AssetData_Id })
|
||||
.ForeignKey("dbo.GeoFences", t => t.GeoFenceData_Id, cascadeDelete: true)
|
||||
.ForeignKey("dbo.Assets", t => t.AssetData_Id, cascadeDelete: true)
|
||||
.Index(t => t.GeoFenceData_Id)
|
||||
.Index(t => t.AssetData_Id);
|
||||
|
||||
AddColumn("dbo.GeoFences", "Emails", c => c.String(nullable: false));
|
||||
AddColumn("dbo.GeoFences", "CooldownInMinutes", c => c.Long(nullable: false));
|
||||
DropColumn("dbo.GeoFences", "Email");
|
||||
DropColumn("dbo.GeoFences", "CooldownInSeconds");
|
||||
DropColumn("dbo.GeoFences", "AssetIds");
|
||||
}
|
||||
|
||||
public override void Down()
|
||||
{
|
||||
AddColumn("dbo.GeoFences", "AssetIds", c => c.String(nullable: false));
|
||||
AddColumn("dbo.GeoFences", "CooldownInSeconds", c => c.Long(nullable: false));
|
||||
AddColumn("dbo.GeoFences", "Email", c => c.String(nullable: false));
|
||||
DropForeignKey("dbo.GeoFenceDataAssetDatas", "AssetData_Id", "dbo.Assets");
|
||||
DropForeignKey("dbo.GeoFenceDataAssetDatas", "GeoFenceData_Id", "dbo.GeoFences");
|
||||
DropIndex("dbo.GeoFenceDataAssetDatas", new[] { "AssetData_Id" });
|
||||
DropIndex("dbo.GeoFenceDataAssetDatas", new[] { "GeoFenceData_Id" });
|
||||
DropColumn("dbo.GeoFences", "CooldownInMinutes");
|
||||
DropColumn("dbo.GeoFences", "Emails");
|
||||
DropTable("dbo.GeoFenceDataAssetDatas");
|
||||
RenameTable(name: "dbo.GeoFenceUpdates", newName: "NotificationUpdates");
|
||||
}
|
||||
}
|
||||
}
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
29
Backend/src/Trackable.EntityFramework/Migrations/201708191324100_AddAssetsPropertiesTableAndAssetTypeField.Designer.cs
сгенерированный
Normal file
29
Backend/src/Trackable.EntityFramework/Migrations/201708191324100_AddAssetsPropertiesTableAndAssetTypeField.Designer.cs
сгенерированный
Normal file
|
@ -0,0 +1,29 @@
|
|||
// <auto-generated />
|
||||
namespace Trackable.EntityFramework.Migrations
|
||||
{
|
||||
using System.CodeDom.Compiler;
|
||||
using System.Data.Entity.Migrations;
|
||||
using System.Data.Entity.Migrations.Infrastructure;
|
||||
using System.Resources;
|
||||
|
||||
[GeneratedCode("EntityFramework.Migrations", "6.1.3-40302")]
|
||||
public sealed partial class AddAssetsPropertiesTableAndAssetTypeField : IMigrationMetadata
|
||||
{
|
||||
private readonly ResourceManager Resources = new ResourceManager(typeof(AddAssetsPropertiesTableAndAssetTypeField));
|
||||
|
||||
string IMigrationMetadata.Id
|
||||
{
|
||||
get { return "201708191324100_AddAssetsPropertiesTableAndAssetTypeField"; }
|
||||
}
|
||||
|
||||
string IMigrationMetadata.Source
|
||||
{
|
||||
get { return null; }
|
||||
}
|
||||
|
||||
string IMigrationMetadata.Target
|
||||
{
|
||||
get { return Resources.GetString("Target"); }
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,43 @@
|
|||
namespace Trackable.EntityFramework.Migrations
|
||||
{
|
||||
using System;
|
||||
using System.Data.Entity.Migrations;
|
||||
|
||||
public partial class AddAssetsPropertiesTableAndAssetTypeField : DbMigration
|
||||
{
|
||||
public override void Up()
|
||||
{
|
||||
CreateTable(
|
||||
"dbo.AssetProperties",
|
||||
c => new
|
||||
{
|
||||
Id = c.Int(nullable: false, identity: true),
|
||||
AssetHeight = c.Double(),
|
||||
AssetWidth = c.Double(),
|
||||
AssetLength = c.Double(),
|
||||
AssetWeight = c.Double(),
|
||||
AssetAxels = c.Int(),
|
||||
AssetTrailers = c.Int(),
|
||||
AssetSemi = c.Boolean(),
|
||||
AssetMaxGradient = c.Double(),
|
||||
AssetMinTurnRadius = c.Double(),
|
||||
Deleted = c.Boolean(nullable: false),
|
||||
CreatedAtTimeUtc = c.DateTime(defaultValueSql: "GETUTCDATE()", nullable: false),
|
||||
AssetId = c.String(maxLength: 128),
|
||||
})
|
||||
.PrimaryKey(t => t.Id)
|
||||
.ForeignKey("dbo.Assets", t => t.AssetId)
|
||||
.Index(t => t.AssetId);
|
||||
|
||||
AddColumn("dbo.Assets", "AssetType", c => c.Int(nullable: false, defaultValue: 0));
|
||||
}
|
||||
|
||||
public override void Down()
|
||||
{
|
||||
DropForeignKey("dbo.AssetProperties", "AssetId", "dbo.Assets");
|
||||
DropIndex("dbo.AssetProperties", new[] { "AssetId" });
|
||||
DropColumn("dbo.Assets", "AssetType");
|
||||
DropTable("dbo.AssetProperties");
|
||||
}
|
||||
}
|
||||
}
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
29
Backend/src/Trackable.EntityFramework/Migrations/201711091002497_AddLatestPositionColumns.Designer.cs
сгенерированный
Normal file
29
Backend/src/Trackable.EntityFramework/Migrations/201711091002497_AddLatestPositionColumns.Designer.cs
сгенерированный
Normal file
|
@ -0,0 +1,29 @@
|
|||
// <auto-generated />
|
||||
namespace Trackable.EntityFramework.Migrations
|
||||
{
|
||||
using System.CodeDom.Compiler;
|
||||
using System.Data.Entity.Migrations;
|
||||
using System.Data.Entity.Migrations.Infrastructure;
|
||||
using System.Resources;
|
||||
|
||||
[GeneratedCode("EntityFramework.Migrations", "6.1.3-40302")]
|
||||
public sealed partial class AddLatestPositionColumns : IMigrationMetadata
|
||||
{
|
||||
private readonly ResourceManager Resources = new ResourceManager(typeof(AddLatestPositionColumns));
|
||||
|
||||
string IMigrationMetadata.Id
|
||||
{
|
||||
get { return "201711091002497_AddLatestPositionColumns"; }
|
||||
}
|
||||
|
||||
string IMigrationMetadata.Source
|
||||
{
|
||||
get { return null; }
|
||||
}
|
||||
|
||||
string IMigrationMetadata.Target
|
||||
{
|
||||
get { return Resources.GetString("Target"); }
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,36 @@
|
|||
namespace Trackable.EntityFramework.Migrations
|
||||
{
|
||||
using System;
|
||||
using System.Data.Entity.Migrations;
|
||||
|
||||
public partial class AddLatestPositionColumns : DbMigration
|
||||
{
|
||||
public override void Up()
|
||||
{
|
||||
DropForeignKey("dbo.TrackingPoints", "AssetId", "dbo.Assets");
|
||||
DropForeignKey("dbo.TrackingPoints", "TrackingDeviceId", "dbo.TrackingDevices");
|
||||
AddColumn("dbo.Assets", "LatestPosition_Id", c => c.Int());
|
||||
AddColumn("dbo.TrackingDevices", "LatestPosition_Id", c => c.Int());
|
||||
CreateIndex("dbo.Assets", "LatestPosition_Id");
|
||||
CreateIndex("dbo.TrackingDevices", "LatestPosition_Id");
|
||||
AddForeignKey("dbo.TrackingDevices", "LatestPosition_Id", "dbo.TrackingPoints", "Id");
|
||||
AddForeignKey("dbo.Assets", "LatestPosition_Id", "dbo.TrackingPoints", "Id");
|
||||
AddForeignKey("dbo.TrackingPoints", "AssetId", "dbo.Assets", "Id");
|
||||
AddForeignKey("dbo.TrackingPoints", "TrackingDeviceId", "dbo.TrackingDevices", "Id");
|
||||
}
|
||||
|
||||
public override void Down()
|
||||
{
|
||||
DropForeignKey("dbo.TrackingPoints", "TrackingDeviceId", "dbo.TrackingDevices");
|
||||
DropForeignKey("dbo.TrackingPoints", "AssetId", "dbo.Assets");
|
||||
DropForeignKey("dbo.Assets", "LatestPosition_Id", "dbo.TrackingPoints");
|
||||
DropForeignKey("dbo.TrackingDevices", "LatestPosition_Id", "dbo.TrackingPoints");
|
||||
DropIndex("dbo.TrackingDevices", new[] { "LatestPosition_Id" });
|
||||
DropIndex("dbo.Assets", new[] { "LatestPosition_Id" });
|
||||
DropColumn("dbo.TrackingDevices", "LatestPosition_Id");
|
||||
DropColumn("dbo.Assets", "LatestPosition_Id");
|
||||
AddForeignKey("dbo.TrackingPoints", "TrackingDeviceId", "dbo.TrackingDevices", "Id", cascadeDelete: true);
|
||||
AddForeignKey("dbo.TrackingPoints", "AssetId", "dbo.Assets", "Id", cascadeDelete: true);
|
||||
}
|
||||
}
|
||||
}
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
29
Backend/src/Trackable.EntityFramework/Migrations/201711100955354_AddDeploymentId.Designer.cs
сгенерированный
Normal file
29
Backend/src/Trackable.EntityFramework/Migrations/201711100955354_AddDeploymentId.Designer.cs
сгенерированный
Normal file
|
@ -0,0 +1,29 @@
|
|||
// <auto-generated />
|
||||
namespace Trackable.EntityFramework.Migrations
|
||||
{
|
||||
using System.CodeDom.Compiler;
|
||||
using System.Data.Entity.Migrations;
|
||||
using System.Data.Entity.Migrations.Infrastructure;
|
||||
using System.Resources;
|
||||
|
||||
[GeneratedCode("EntityFramework.Migrations", "6.1.3-40302")]
|
||||
public sealed partial class AddDeploymentId : IMigrationMetadata
|
||||
{
|
||||
private readonly ResourceManager Resources = new ResourceManager(typeof(AddDeploymentId));
|
||||
|
||||
string IMigrationMetadata.Id
|
||||
{
|
||||
get { return "201711100955354_AddDeploymentId"; }
|
||||
}
|
||||
|
||||
string IMigrationMetadata.Source
|
||||
{
|
||||
get { return null; }
|
||||
}
|
||||
|
||||
string IMigrationMetadata.Target
|
||||
{
|
||||
get { return Resources.GetString("Target"); }
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,27 @@
|
|||
namespace Trackable.EntityFramework.Migrations
|
||||
{
|
||||
using System;
|
||||
using System.Data.Entity.Migrations;
|
||||
|
||||
public partial class AddDeploymentId : DbMigration
|
||||
{
|
||||
public override void Up()
|
||||
{
|
||||
CreateTable(
|
||||
"dbo.DeploymentId",
|
||||
c => new
|
||||
{
|
||||
Id = c.Guid(nullable: false),
|
||||
Deleted = c.Boolean(nullable: false),
|
||||
CreatedAtTimeUtc = c.DateTime(defaultValueSql: "GETUTCDATE()", nullable: false),
|
||||
})
|
||||
.PrimaryKey(t => t.Id);
|
||||
|
||||
}
|
||||
|
||||
public override void Down()
|
||||
{
|
||||
DropTable("dbo.DeploymentId");
|
||||
}
|
||||
}
|
||||
}
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
29
Backend/src/Trackable.EntityFramework/Migrations/201711131016182_CreateTokenTable.Designer.cs
сгенерированный
Normal file
29
Backend/src/Trackable.EntityFramework/Migrations/201711131016182_CreateTokenTable.Designer.cs
сгенерированный
Normal file
|
@ -0,0 +1,29 @@
|
|||
// <auto-generated />
|
||||
namespace Trackable.EntityFramework.Migrations
|
||||
{
|
||||
using System.CodeDom.Compiler;
|
||||
using System.Data.Entity.Migrations;
|
||||
using System.Data.Entity.Migrations.Infrastructure;
|
||||
using System.Resources;
|
||||
|
||||
[GeneratedCode("EntityFramework.Migrations", "6.1.3-40302")]
|
||||
public sealed partial class CreateTokenTable : IMigrationMetadata
|
||||
{
|
||||
private readonly ResourceManager Resources = new ResourceManager(typeof(CreateTokenTable));
|
||||
|
||||
string IMigrationMetadata.Id
|
||||
{
|
||||
get { return "201711131016182_CreateTokenTable"; }
|
||||
}
|
||||
|
||||
string IMigrationMetadata.Source
|
||||
{
|
||||
get { return null; }
|
||||
}
|
||||
|
||||
string IMigrationMetadata.Target
|
||||
{
|
||||
get { return Resources.GetString("Target"); }
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,39 @@
|
|||
namespace Trackable.EntityFramework.Migrations
|
||||
{
|
||||
using System;
|
||||
using System.Data.Entity.Migrations;
|
||||
|
||||
public partial class CreateTokenTable : DbMigration
|
||||
{
|
||||
public override void Up()
|
||||
{
|
||||
CreateTable(
|
||||
"dbo.Tokens",
|
||||
c => new
|
||||
{
|
||||
Id = c.Guid(nullable: false),
|
||||
Value = c.String(),
|
||||
IsActive = c.Boolean(nullable: false),
|
||||
Deleted = c.Boolean(nullable: false),
|
||||
CreatedAtTimeUtc = c.DateTime(defaultValueSql: "GETUTCDATE()", nullable: false),
|
||||
TrackingDevice_Id = c.String(maxLength: 128),
|
||||
User_Id = c.Guid(),
|
||||
})
|
||||
.PrimaryKey(t => t.Id)
|
||||
.ForeignKey("dbo.TrackingDevices", t => t.TrackingDevice_Id)
|
||||
.ForeignKey("dbo.Users", t => t.User_Id)
|
||||
.Index(t => t.TrackingDevice_Id)
|
||||
.Index(t => t.User_Id);
|
||||
|
||||
}
|
||||
|
||||
public override void Down()
|
||||
{
|
||||
DropForeignKey("dbo.Tokens", "User_Id", "dbo.Users");
|
||||
DropForeignKey("dbo.Tokens", "TrackingDevice_Id", "dbo.TrackingDevices");
|
||||
DropIndex("dbo.Tokens", new[] { "User_Id" });
|
||||
DropIndex("dbo.Tokens", new[] { "TrackingDevice_Id" });
|
||||
DropTable("dbo.Tokens");
|
||||
}
|
||||
}
|
||||
}
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -0,0 +1,40 @@
|
|||
using Trackable.Common;
|
||||
using System;
|
||||
using System.Data.Entity.Migrations;
|
||||
using System.Linq.Expressions;
|
||||
using System.Linq;
|
||||
|
||||
|
||||
namespace Trackable.EntityFramework.Migrations
|
||||
{
|
||||
internal sealed class Configuration : DbMigrationsConfiguration<TrackableDbContext>
|
||||
{
|
||||
public Configuration()
|
||||
{
|
||||
AutomaticMigrationsEnabled = false;
|
||||
}
|
||||
|
||||
protected override void Seed(TrackableDbContext context)
|
||||
{
|
||||
foreach (var role in UserRoles.Roles)
|
||||
{
|
||||
if (!context.Roles.Any(r => r.Name == role))
|
||||
{
|
||||
context.Roles.Add(new RoleData()
|
||||
{
|
||||
Id = Guid.NewGuid(),
|
||||
Name = role
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
if(context.DeploymentId.Count() < 1)
|
||||
{
|
||||
context.DeploymentId.Add(new DeploymentIdData()
|
||||
{
|
||||
Id = Guid.NewGuid()
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,36 @@
|
|||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// General Information about an assembly is controlled through the following
|
||||
// set of attributes. Change these attribute values to modify the information
|
||||
// associated with an assembly.
|
||||
[assembly: AssemblyTitle("Trackable.EntityFramework")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("Trackable.EntityFramework")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2017")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// Setting ComVisible to false makes the types in this assembly not visible
|
||||
// to COM components. If you need to access a type in this assembly from
|
||||
// COM, set the ComVisible attribute to true on that type.
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||
[assembly: Guid("a6b23ff3-82f4-4f29-960c-60c2f09eccad")]
|
||||
|
||||
// Version information for an assembly consists of the following four values:
|
||||
//
|
||||
// Major Version
|
||||
// Minor Version
|
||||
// Build Number
|
||||
// Revision
|
||||
//
|
||||
// You can specify all the values or you can default the Build and Revision Numbers
|
||||
// by using the '*' as shown below:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("1.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
|
@ -0,0 +1,17 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Trackable.EntityFramework
|
||||
{
|
||||
[Table("Roles")]
|
||||
public class RoleData : EntityBase<Guid>
|
||||
{
|
||||
public string Name { get; set; }
|
||||
|
||||
public ICollection<UserData> Users { get; set; }
|
||||
}
|
||||
}
|
Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше
Загрузка…
Ссылка в новой задаче