| @ -0,0 +1,6 @@ | |||
| .* | |||
| *.user | |||
| *.suo | |||
| *.tmp | |||
| bin | |||
| obj | |||
| @ -0,0 +1,22 @@ | |||
| | |||
| Microsoft Visual Studio Solution File, Format Version 12.00 | |||
| # Visual Studio 2013 | |||
| VisualStudioVersion = 12.0.40629.0 | |||
| MinimumVisualStudioVersion = 10.0.40219.1 | |||
| Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ButcherTraceBack", "ButcherTraceBack\ButcherTraceBack.csproj", "{509E5360-681E-4422-B457-9B47BDF80B17}" | |||
| EndProject | |||
| Global | |||
| GlobalSection(SolutionConfigurationPlatforms) = preSolution | |||
| Debug|Any CPU = Debug|Any CPU | |||
| Release|Any CPU = Release|Any CPU | |||
| EndGlobalSection | |||
| GlobalSection(ProjectConfigurationPlatforms) = postSolution | |||
| {509E5360-681E-4422-B457-9B47BDF80B17}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |||
| {509E5360-681E-4422-B457-9B47BDF80B17}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||
| {509E5360-681E-4422-B457-9B47BDF80B17}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||
| {509E5360-681E-4422-B457-9B47BDF80B17}.Release|Any CPU.Build.0 = Release|Any CPU | |||
| EndGlobalSection | |||
| GlobalSection(SolutionProperties) = preSolution | |||
| HideSolutionNode = FALSE | |||
| EndGlobalSection | |||
| EndGlobal | |||
| @ -0,0 +1,23 @@ | |||
| using System; | |||
| using System.Collections.Generic; | |||
| using System.Linq; | |||
| using System.Web; | |||
| using System.Web.Mvc; | |||
| using System.Web.Routing; | |||
| namespace ButcherTraceBack | |||
| { | |||
| public class RouteConfig | |||
| { | |||
| public static void RegisterRoutes(RouteCollection routes) | |||
| { | |||
| routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); | |||
| routes.MapRoute( | |||
| name: "Default", | |||
| url: "{controller}/{action}/{id}", | |||
| defaults: new { controller = "CodeView", action = "Index", id = UrlParameter.Optional } | |||
| ); | |||
| } | |||
| } | |||
| } | |||
| @ -0,0 +1,19 @@ | |||
| using System; | |||
| using System.Collections.Generic; | |||
| using System.Linq; | |||
| using System.Web.Http; | |||
| namespace ButcherTraceBack | |||
| { | |||
| public static class WebApiConfig | |||
| { | |||
| public static void Register(HttpConfiguration config) | |||
| { | |||
| config.Routes.MapHttpRoute( | |||
| name: "DefaultApi", | |||
| routeTemplate: "api/{controller}/{action}/{id}", | |||
| defaults: new { id = RouteParameter.Optional } | |||
| ); | |||
| } | |||
| } | |||
| } | |||
| @ -0,0 +1,171 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | |||
| <Project ToolsVersion="12.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> | |||
| <ProductVersion> | |||
| </ProductVersion> | |||
| <SchemaVersion>2.0</SchemaVersion> | |||
| <ProjectGuid>{509E5360-681E-4422-B457-9B47BDF80B17}</ProjectGuid> | |||
| <ProjectTypeGuids>{E3E379DF-F4C6-4180-9B81-6769533ABE47};{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids> | |||
| <OutputType>Library</OutputType> | |||
| <AppDesignerFolder>Properties</AppDesignerFolder> | |||
| <RootNamespace>ButcherTraceBack</RootNamespace> | |||
| <AssemblyName>ButcherTraceBack</AssemblyName> | |||
| <TargetFrameworkVersion>v4.0</TargetFrameworkVersion> | |||
| <MvcBuildViews>false</MvcBuildViews> | |||
| <UseIISExpress>true</UseIISExpress> | |||
| <IISExpressSSLPort /> | |||
| <IISExpressAnonymousAuthentication /> | |||
| <IISExpressWindowsAuthentication /> | |||
| <IISExpressUseClassicPipelineMode /> | |||
| </PropertyGroup> | |||
| <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> | |||
| <DebugSymbols>true</DebugSymbols> | |||
| <DebugType>full</DebugType> | |||
| <Optimize>false</Optimize> | |||
| <OutputPath>bin\</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\</OutputPath> | |||
| <DefineConstants>TRACE</DefineConstants> | |||
| <ErrorReport>prompt</ErrorReport> | |||
| <WarningLevel>4</WarningLevel> | |||
| </PropertyGroup> | |||
| <ItemGroup> | |||
| <Reference Include="Newtonsoft.Json, Version=4.0.3.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL"> | |||
| <SpecificVersion>False</SpecificVersion> | |||
| <HintPath>..\packages\Newtonsoft.Json.4.5.11\lib\net40\Newtonsoft.Json.dll</HintPath> | |||
| </Reference> | |||
| <Reference Include="System" /> | |||
| <Reference Include="System.Data" /> | |||
| <Reference Include="System.Web.Optimization"> | |||
| <HintPath>..\..\web1\packages\Microsoft.AspNet.Web.Optimization.1.1.3\lib\net40\System.Web.Optimization.dll</HintPath> | |||
| </Reference> | |||
| <Reference Include="System.Xml.Linq" /> | |||
| <Reference Include="System.Web" /> | |||
| <Reference Include="System.Xml" /> | |||
| <Reference Include="System.Configuration" /> | |||
| <Reference Include="Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> | |||
| <Private>True</Private> | |||
| <HintPath>..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll</HintPath> | |||
| </Reference> | |||
| <Reference Include="System.Net.Http"> | |||
| <Private>True</Private> | |||
| <HintPath>..\packages\Microsoft.Net.Http.2.0.30506.0\lib\net40\System.Net.Http.dll</HintPath> | |||
| </Reference> | |||
| <Reference Include="System.Web.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> | |||
| <HintPath>..\packages\Microsoft.AspNet.WebApi.Core.4.0.30506.0\lib\net40\System.Web.Http.dll</HintPath> | |||
| </Reference> | |||
| <Reference Include="System.Web.Http.WebHost, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> | |||
| <HintPath>..\packages\Microsoft.AspNet.WebApi.WebHost.4.0.30506.0\lib\net40\System.Web.Http.WebHost.dll</HintPath> | |||
| </Reference> | |||
| <Reference Include="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> | |||
| <Private>True</Private> | |||
| <HintPath>..\packages\Microsoft.AspNet.Mvc.4.0.30506.0\lib\net40\System.Web.Mvc.dll</HintPath> | |||
| </Reference> | |||
| <Reference Include="System.Web.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> | |||
| <Private>True</Private> | |||
| <HintPath>..\packages\Microsoft.AspNet.Razor.2.0.30506.0\lib\net40\System.Web.Razor.dll</HintPath> | |||
| </Reference> | |||
| <Reference Include="System.Web.WebPages, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> | |||
| <Private>True</Private> | |||
| <HintPath>..\packages\Microsoft.AspNet.WebPages.2.0.30506.0\lib\net40\System.Web.WebPages.dll</HintPath> | |||
| </Reference> | |||
| <Reference Include="System.Web.WebPages.Deployment, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> | |||
| <Private>True</Private> | |||
| <HintPath>..\packages\Microsoft.AspNet.WebPages.2.0.30506.0\lib\net40\System.Web.WebPages.Deployment.dll</HintPath> | |||
| </Reference> | |||
| <Reference Include="System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> | |||
| <Private>True</Private> | |||
| <HintPath>..\packages\Microsoft.AspNet.WebPages.2.0.30506.0\lib\net40\System.Web.WebPages.Razor.dll</HintPath> | |||
| </Reference> | |||
| </ItemGroup> | |||
| <ItemGroup> | |||
| <Compile Include="Controllers\CodeViewController.cs" /> | |||
| <Compile Include="Controllers\FreshViewController.cs" /> | |||
| <Compile Include="Controllers\SqlHelper.cs" /> | |||
| <Compile Include="Controllers\TraceBackInfoController.cs" /> | |||
| <Compile Include="Global.asax.cs"> | |||
| <DependentUpon>Global.asax</DependentUpon> | |||
| </Compile> | |||
| <Compile Include="Models\FreshTraceBack.cs" /> | |||
| <Compile Include="Models\IWithCode.cs" /> | |||
| <Compile Include="Models\TraceBackInfo.cs" /> | |||
| <Compile Include="Properties\AssemblyInfo.cs" /> | |||
| </ItemGroup> | |||
| <ItemGroup> | |||
| <Compile Include="App_Start\RouteConfig.cs" /> | |||
| <Compile Include="App_Start\WebApiConfig.cs" /> | |||
| <Content Include="css\lrtk.css" /> | |||
| <Content Include="Global.asax" /> | |||
| <Content Include="images\wanfu09.jpg" /> | |||
| <Content Include="images\wanfu01.jpg" /> | |||
| <Content Include="images\wanfu02.jpg" /> | |||
| <Content Include="images\wanfu03.jpg" /> | |||
| <Content Include="images\wanfu04.jpg" /> | |||
| <Content Include="images\wanfu05.jpg" /> | |||
| <Content Include="images\wanfu06.jpg" /> | |||
| <Content Include="images\wanfu07.jpg" /> | |||
| <Content Include="images\wanfu08.jpg" /> | |||
| <Content Include="js\jflex.js" /> | |||
| <Content Include="js\jquery-3.2.0.js" /> | |||
| <Content Include="Web.config" /> | |||
| <Content Include="Web.Debug.config"> | |||
| <DependentUpon>Web.config</DependentUpon> | |||
| </Content> | |||
| <Content Include="Web.Release.config"> | |||
| <DependentUpon>Web.config</DependentUpon> | |||
| </Content> | |||
| <Content Include="Views\Web.config" /> | |||
| <Content Include="WFWhiteTraceSystem.html" /> | |||
| </ItemGroup> | |||
| <ItemGroup> | |||
| <None Include="Properties\PublishProfiles\ButcherTraceBack.pubxml" /> | |||
| <Content Include="Views\CodeView\Index - s.cshtml" /> | |||
| <Content Include="Views\FreshView\Index.cshtml" /> | |||
| </ItemGroup> | |||
| <ItemGroup> | |||
| <Content Include="Views\CodeView\Index.cshtml" /> | |||
| </ItemGroup> | |||
| <PropertyGroup> | |||
| <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion> | |||
| <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath> | |||
| </PropertyGroup> | |||
| <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> | |||
| <Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" /> | |||
| <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" /> | |||
| <Target Name="MvcBuildViews" AfterTargets="AfterBuild" Condition="'$(MvcBuildViews)'=='true'"> | |||
| <AspNetCompiler VirtualPath="temp" PhysicalPath="$(WebProjectOutputDir)" /> | |||
| </Target> | |||
| <ProjectExtensions> | |||
| <VisualStudio> | |||
| <FlavorProperties GUID="{349c5851-65df-11da-9384-00065b846f21}"> | |||
| <WebProjectProperties> | |||
| <UseIIS>True</UseIIS> | |||
| <AutoAssignPort>True</AutoAssignPort> | |||
| <DevelopmentServerPort>33904</DevelopmentServerPort> | |||
| <DevelopmentServerVPath>/</DevelopmentServerVPath> | |||
| <IISUrl>http://localhost:33904/</IISUrl> | |||
| <NTLMAuthentication>False</NTLMAuthentication> | |||
| <UseCustomServer>False</UseCustomServer> | |||
| <CustomServerUrl> | |||
| </CustomServerUrl> | |||
| <SaveServerSettingsInUserFile>False</SaveServerSettingsInUserFile> | |||
| </WebProjectProperties> | |||
| </FlavorProperties> | |||
| </VisualStudio> | |||
| </ProjectExtensions> | |||
| <!-- 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,29 @@ | |||
| using ButcherTraceBack.Models; | |||
| using System; | |||
| using System.Collections.Generic; | |||
| using System.Linq; | |||
| using System.Web; | |||
| using System.Web.Mvc; | |||
| namespace ButcherTraceBack.Controllers | |||
| { | |||
| public class CodeViewController : Controller | |||
| { | |||
| public ActionResult Index(string code) | |||
| { | |||
| if (code != null && code.Length == 22) | |||
| { | |||
| return RedirectToAction("Index", "FreshView", new { code = code }); | |||
| } | |||
| TraceBackInfo info = SqlHelper<TraceBackInfo>.Query(code); | |||
| if (info == null) | |||
| { | |||
| info = new TraceBackInfo(); | |||
| } | |||
| else if (info.Code != null && info.Code.Length >= 12) | |||
| info.Code = info.Code.Substring(info.Code.Length - 6, 6); | |||
| return View(info); | |||
| } | |||
| } | |||
| } | |||
| @ -0,0 +1,24 @@ | |||
| using ButcherTraceBack.Models; | |||
| using System; | |||
| using System.Collections.Generic; | |||
| using System.Linq; | |||
| using System.Web; | |||
| using System.Web.Mvc; | |||
| namespace ButcherTraceBack.Controllers | |||
| { | |||
| public class FreshViewController : Controller | |||
| { | |||
| public ActionResult Index(string code) | |||
| { | |||
| FreshTraceBack info = SqlHelper<FreshTraceBack>.Query(code); | |||
| if (info == null) | |||
| { | |||
| info = new FreshTraceBack(); | |||
| } | |||
| else if (info.Code != null && info.Code.Length >= 10) | |||
| info.Code = info.Code.Substring(info.Code.Length - 5, 5); | |||
| return View(info); | |||
| } | |||
| } | |||
| } | |||
| @ -0,0 +1,140 @@ | |||
| using ButcherTraceBack.Models; | |||
| using System; | |||
| using System.Collections.Generic; | |||
| using System.Configuration; | |||
| using System.Data; | |||
| using System.Data.SqlClient; | |||
| using System.Linq; | |||
| using System.Web; | |||
| namespace ButcherTraceBack.Controllers | |||
| { | |||
| public static class SqlHelper<T> | |||
| where T : IWithCode, new() | |||
| { | |||
| private static readonly string SqlConnectionString = ConfigurationManager.ConnectionStrings["DbConnection"].ToString(); | |||
| public static T Query(string code) | |||
| { | |||
| if (string.IsNullOrEmpty(code)) | |||
| return new T() { Code = "二维码无效" }; | |||
| var type = typeof(T); | |||
| var tableName = GetTableName(type); | |||
| using (var dbConnection = new SqlConnection(SqlConnectionString)) | |||
| { | |||
| dbConnection.Open(); | |||
| var sql = string.Format("select * from [{0}] where Code=@code", tableName); | |||
| var cmd = new SqlCommand(sql, dbConnection); | |||
| cmd.Parameters.Add(new SqlParameter("@code", code)); | |||
| using (var reader = cmd.ExecuteReader()) | |||
| { | |||
| while (reader.Read()) | |||
| { | |||
| var entity = new T(); | |||
| foreach (var p in type.GetProperties()) | |||
| { | |||
| var v = reader[p.Name]; | |||
| if (v.GetType().Name.ToLower() != "dbnull") | |||
| p.SetValue(entity, reader[p.Name], null); | |||
| } | |||
| return entity; | |||
| } | |||
| } | |||
| } | |||
| return new T(); | |||
| } | |||
| public static string BatchInsert(List<T> infos,params string[] fields) | |||
| { | |||
| var tableName = GetTableName(); | |||
| using (var dbConnection = new SqlConnection(SqlConnectionString)) | |||
| { | |||
| dbConnection.Open(); | |||
| var transaction = dbConnection.BeginTransaction(); | |||
| try | |||
| { | |||
| foreach (T info in infos) | |||
| UpdateOrInsert(transaction, info, tableName, fields); | |||
| transaction.Commit(); | |||
| return null; | |||
| } | |||
| catch (Exception e) | |||
| { | |||
| transaction.Rollback(); | |||
| return e.Message; | |||
| } | |||
| } | |||
| } | |||
| static string GetTableName(Type type = null) | |||
| { | |||
| if (type == null) | |||
| type = typeof(T); | |||
| var tableName = MapToTableAttribute.GetTableName(type); | |||
| if (string.IsNullOrEmpty(tableName)) | |||
| throw new Exception("类型未识别映射表"); | |||
| return tableName; | |||
| } | |||
| static bool Exist(SqlTransaction transaction, string code, string tableName) | |||
| { | |||
| var selectSql = string.Format("select top(1) code from [{0}] where [Code]=@code", tableName); | |||
| var queryCmd = new SqlCommand(selectSql, transaction.Connection, transaction); | |||
| queryCmd.Parameters.Add(new SqlParameter("@code", code)); | |||
| return queryCmd.ExecuteScalar() != null; | |||
| } | |||
| static int Update(SqlTransaction transaction, Type type, T info, string code,string tableName, params string[] fields) | |||
| { | |||
| if (fields.Length == 0) | |||
| return 0; | |||
| var updateSql = string.Format("UPDATE [{0}] SET {1} where [Code]=@wCode", tableName, string.Join(",", fields.Select(x => string.Format("[{0}] = @{0}", x)))); | |||
| var updateCmd = new SqlCommand(updateSql, transaction.Connection, transaction); | |||
| foreach (var item in fields) | |||
| { | |||
| object obj; | |||
| var v = type.GetProperty(item).GetValue(info, null); | |||
| if (v == null) | |||
| obj = System.DBNull.Value; | |||
| else | |||
| obj = v; | |||
| updateCmd.Parameters.Add(new SqlParameter("@" + item, obj)); | |||
| } | |||
| updateCmd.Parameters.Add(new SqlParameter("@wCode", info.Code)); | |||
| return updateCmd.ExecuteNonQuery(); | |||
| } | |||
| static void Insert(SqlTransaction transaction, Type type, T info,string tableName, params string[] fields) | |||
| { | |||
| var insertSql = string.Format("INSERT INTO [{0}]({1}) VALUES({2})", tableName, string.Join(",", fields.Select(x => string.Format("[{0}]", x))), string.Join(",", fields.Select(x => "@" + x))); | |||
| var insertCmd = new SqlCommand(insertSql, transaction.Connection, transaction); | |||
| foreach (var item in fields) | |||
| { | |||
| object obj; | |||
| var v = type.GetProperty(item).GetValue(info, null); | |||
| if (v == null) | |||
| obj = System.DBNull.Value; | |||
| else | |||
| obj = v; | |||
| insertCmd.Parameters.Add(new SqlParameter("@" + item, obj)); | |||
| } | |||
| insertCmd.ExecuteNonQuery(); | |||
| } | |||
| static void UpdateOrInsert(SqlTransaction transaction, T info, string tableName, params string[] fields) | |||
| { | |||
| var type = info.GetType(); | |||
| var exist = Exist(transaction, info.Code, tableName); | |||
| if (exist) | |||
| { | |||
| var upFiles = fields.Where(x => x != "Code").ToArray(); | |||
| Update(transaction, type, info, info.Code, tableName, upFiles); | |||
| } | |||
| else | |||
| { | |||
| Insert(transaction, type, info, tableName, fields); | |||
| } | |||
| } | |||
| } | |||
| } | |||
| @ -0,0 +1,54 @@ | |||
| using ButcherTraceBack.Models; | |||
| using Newtonsoft.Json; | |||
| using System; | |||
| using System.Collections.Generic; | |||
| using System.Linq; | |||
| using System.Net; | |||
| using System.Net.Http; | |||
| using System.Web.Http; | |||
| namespace ButcherTraceBack.Controllers | |||
| { | |||
| public class TraceBackInfoController : ApiController | |||
| { | |||
| public string ButcherInsert([System.Web.Http.FromBody]string json) | |||
| { | |||
| var fields = new string[] { "Code", "Goods_Name", "ProductDate", "ExpirationTime", "ProductCompany", "CompanyAddress", "CompanyTel", "PigFarmAddress", "TestingNo", "TestingResult", "TestingMan", "Farmer", "ButcherBatch", "ButcherTime" }; | |||
| return UpdateOrInsert(json, fields); | |||
| } | |||
| public string InsertSaleOutStore([System.Web.Http.FromBody]string json) | |||
| { | |||
| return UpdateOrInsert(json, "Code", "SendDate", "SendCustomer", "CarNo"); | |||
| } | |||
| public string InsertInStore([System.Web.Http.FromBody]string json) | |||
| { | |||
| return UpdateOrInsert(json, "Code", "InStoreDate"); | |||
| } | |||
| string UpdateOrInsert(string json, params string[] fields) | |||
| { | |||
| var infos = JsonConvert.DeserializeObject<List<TraceBackInfo>>(json); | |||
| return SqlHelper<TraceBackInfo>.BatchInsert(infos, fields); | |||
| } | |||
| public string SegmentInsert([System.Web.Http.FromBody]string json) | |||
| { | |||
| var fields = new string[] { "Code", "Goods_Name", "Goods_Spec", "Weight", "ButcherDate", "ProductDate", "Farm_Name", "TestingResult", "TestingMan", "ProductBatch", "InStoreDate", "SendCustomer" }; | |||
| return SegmentUpdateOrInsert(json, fields); | |||
| } | |||
| public string SegmentInsertSaleOutStore([System.Web.Http.FromBody]string json) | |||
| { | |||
| return SegmentUpdateOrInsert(json, "Code", "SendDate", "SendCustomer", "CarNo"); | |||
| } | |||
| string SegmentUpdateOrInsert(string json, params string[] fields) | |||
| { | |||
| var infos = JsonConvert.DeserializeObject<List<FreshTraceBack>>(json); | |||
| return SqlHelper<FreshTraceBack>.BatchInsert(infos, fields); | |||
| } | |||
| } | |||
| } | |||
| @ -0,0 +1 @@ | |||
| <%@ Application Codebehind="Global.asax.cs" Inherits="ButcherTraceBack.MvcApplication" Language="C#" %> | |||
| @ -0,0 +1,21 @@ | |||
| using System; | |||
| using System.Collections.Generic; | |||
| using System.Linq; | |||
| using System.Web; | |||
| using System.Web.Http; | |||
| using System.Web.Mvc; | |||
| using System.Web.Routing; | |||
| namespace ButcherTraceBack | |||
| { | |||
| // 注意: 有关启用 IIS6 或 IIS7 经典模式的说明, | |||
| // 请访问 http://go.microsoft.com/?LinkId=9394801 | |||
| public class MvcApplication : System.Web.HttpApplication | |||
| { | |||
| protected void Application_Start() | |||
| { | |||
| WebApiConfig.Register(GlobalConfiguration.Configuration); | |||
| RouteConfig.RegisterRoutes(RouteTable.Routes); | |||
| } | |||
| } | |||
| } | |||
| @ -0,0 +1,54 @@ | |||
| using System; | |||
| using System.Collections.Generic; | |||
| using System.Linq; | |||
| using System.Web; | |||
| namespace ButcherTraceBack.Models | |||
| { | |||
| [MapToTable("FreshTraceBack")] | |||
| public class FreshTraceBack : IWithCode | |||
| { | |||
| //[LogicName("条码")] | |||
| public string Code { get; set; } | |||
| //[LogicName("产品名称")] | |||
| public string Goods_Name { get; set; } | |||
| //[LogicName("规格")] | |||
| public string Goods_Spec { get; set; } | |||
| //[LogicName("重量")] | |||
| public string Weight { get; set; } | |||
| //[LogicName("屠宰日期日期")] | |||
| public string ButcherDate { get; set; } | |||
| //[LogicName("生产日期")] | |||
| public string ProductDate { get; set; } | |||
| //[LogicName("养殖场")] | |||
| public string Farm_Name { get; set; } | |||
| //[LogicName("检验结果")] | |||
| public string TestingResult { get; set; } | |||
| //[LogicName("检验人员")] | |||
| public string TestingMan { get; set; } | |||
| //[LogicName("生产批次")] | |||
| public string ProductBatch { get; set; } | |||
| //[LogicName("入库日期")] | |||
| public string InStoreDate { get; set; } | |||
| //[LogicName("发货时间")] | |||
| public string SendDate { get; set; } | |||
| //[LogicName("发货客户")] | |||
| public string SendCustomer { get; set; } | |||
| //[LogicName("货运车牌")] | |||
| public string CarNo { get; set; } | |||
| } | |||
| } | |||
| @ -0,0 +1,36 @@ | |||
| using System; | |||
| using System.Collections.Generic; | |||
| using System.Linq; | |||
| using System.Web; | |||
| namespace ButcherTraceBack.Models | |||
| { | |||
| public interface IWithCode | |||
| { | |||
| string Code { get; set; } | |||
| } | |||
| [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)] | |||
| public class MapToTableAttribute : Attribute | |||
| { | |||
| string mTableName; | |||
| public string TableName { | |||
| get { | |||
| return mTableName; | |||
| } | |||
| } | |||
| public MapToTableAttribute(string field) { | |||
| mTableName = field; | |||
| } | |||
| public static string GetTableName(Type t) | |||
| { | |||
| var att = t.GetCustomAttributes(typeof(MapToTableAttribute), false); | |||
| if (att.Length == 0) | |||
| return null; | |||
| return (att[0] as MapToTableAttribute).TableName; | |||
| } | |||
| } | |||
| } | |||
| @ -0,0 +1,69 @@ | |||
| using System; | |||
| using System.Collections.Generic; | |||
| using System.Linq; | |||
| using System.Web; | |||
| namespace ButcherTraceBack.Models | |||
| { | |||
| [MapToTable("CarcassTraceInfo")] | |||
| public class TraceBackInfo : IWithCode | |||
| { | |||
| //[LogicName("条码")] | |||
| public string Code { get; set; } | |||
| #region BasicInfo 6 | |||
| //[LogicName("产品名称")] | |||
| public string Goods_Name { get; set; } | |||
| //[LogicName("生产日期")] | |||
| public string ProductDate { get; set; } | |||
| //[LogicName("保质期")] | |||
| public string ExpirationTime { get; set; } | |||
| //[LogicName("生产厂家")] | |||
| public string ProductCompany { get; set; } | |||
| //[LogicName("生产厂址")] | |||
| public string CompanyAddress { get; set; } | |||
| //[LogicName("电话")] | |||
| public string CompanyTel { get; set; } | |||
| #endregion | |||
| #region TraceBackInfo 11 | |||
| //[LogicName("生猪产地")] | |||
| public string PigFarmAddress { get; set; } | |||
| //[LogicName("动检证号")] | |||
| public string TestingNo { get; set; } | |||
| //[LogicName("动检结果")] | |||
| public string TestingResult { get; set; } | |||
| //[LogicName("动检人员")] | |||
| public string TestingMan { get; set; } | |||
| //[LogicName("养殖户")] | |||
| public string Farmer { get; set; } | |||
| //[LogicName("屠宰批次")] | |||
| public string ButcherBatch { get; set; } | |||
| //[LogicName("屠宰时间")] | |||
| public string ButcherTime { get; set; } | |||
| //[LogicName("入库时间")] | |||
| public string InStoreDate { get; set; } | |||
| //[LogicName("发货时间")] | |||
| public string SendDate { get; set; } | |||
| //[LogicName("发货客户")] | |||
| public string SendCustomer { get; set; } | |||
| //[LogicName("货运车牌")] | |||
| public string CarNo { get; set; } | |||
| #endregion | |||
| } | |||
| } | |||
| @ -0,0 +1,35 @@ | |||
| using System.Reflection; | |||
| using System.Runtime.CompilerServices; | |||
| using System.Runtime.InteropServices; | |||
| // 有关程序集的常规信息通过下列特性集 | |||
| // 控制。更改这些特性值可修改 | |||
| // 与程序集关联的信息。 | |||
| [assembly: AssemblyTitle("ButcherTraceBack")] | |||
| [assembly: AssemblyDescription("")] | |||
| [assembly: AssemblyConfiguration("")] | |||
| [assembly: AssemblyCompany("")] | |||
| [assembly: AssemblyProduct("ButcherTraceBack")] | |||
| [assembly: AssemblyCopyright("版权所有(C) 2018")] | |||
| [assembly: AssemblyTrademark("")] | |||
| [assembly: AssemblyCulture("")] | |||
| // 将 ComVisible 设置为 false 会使此程序集中的类型 | |||
| // 对 COM 组件不可见。如果需要从 COM 访问此程序集中的某个类型, | |||
| // 请针对该类型将 ComVisible 特性设置为 true。 | |||
| [assembly: ComVisible(false)] | |||
| // 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID | |||
| [assembly: Guid("2741d4a9-a5c3-4457-a11b-b59b416eb830")] | |||
| // 程序集的版本信息由下列四个值组成: | |||
| // | |||
| // 主版本 | |||
| // 次版本 | |||
| // 内部版本号 | |||
| // 修订号 | |||
| // | |||
| // 可以指定所有这些值,也可以使用“修订号”和“内部版本号”的默认值, | |||
| // 方法是按如下所示使用“*”: | |||
| [assembly: AssemblyVersion("1.0.0.0")] | |||
| [assembly: AssemblyFileVersion("1.0.0.0")] | |||
| @ -0,0 +1,17 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | |||
| <!-- | |||
| 您 Web 项目的发布/打包进程将使用此文件。您可以通过编辑此 MSBuild 文件 | |||
| 来自定义该进程的行为。若要了解与此相关的详细信息,请访问 http://go.microsoft.com/fwlink/?LinkID=208121。 | |||
| --> | |||
| <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | |||
| <PropertyGroup> | |||
| <WebPublishMethod>FileSystem</WebPublishMethod> | |||
| <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration> | |||
| <LastUsedPlatform>Any CPU</LastUsedPlatform> | |||
| <SiteUrlToLaunchAfterPublish /> | |||
| <LaunchSiteAfterPublish>True</LaunchSiteAfterPublish> | |||
| <ExcludeApp_Data>False</ExcludeApp_Data> | |||
| <publishUrl>C:\360WiFi\ButcherTraceBack</publishUrl> | |||
| <DeleteExistingFiles>False</DeleteExistingFiles> | |||
| </PropertyGroup> | |||
| </Project> | |||
| @ -0,0 +1,65 @@ | |||
| @model ButcherTraceBack.Models.TraceBackInfo | |||
| @{ | |||
| Layout = null; | |||
| } | |||
| <!DOCTYPE html> | |||
| <html> | |||
| <head> | |||
| <meta name="viewport" content="width=device-width" /> | |||
| <title>追溯信息 @Model.Code</title> | |||
| <style> | |||
| body { | |||
| background-color: white; | |||
| } | |||
| div { | |||
| font-size: 15px; | |||
| padding-bottom: 5px; | |||
| } | |||
| h2 { | |||
| font-size: 20px; | |||
| color: red; | |||
| padding-bottom: 5px; | |||
| } | |||
| table { | |||
| padding-left: 5px; | |||
| padding-top: 5px; | |||
| } | |||
| </style> | |||
| </head> | |||
| <body> | |||
| <div> | |||
| <h2 style="font-size:25px">白条追溯信息</h2> | |||
| <h2>肉品编码</h2> | |||
| <div>@Model.Code</div> | |||
| <h2>基础信息</h2> | |||
| <div>产品名称:@Model.Goods_Name</div> | |||
| <div>生产日期:@Model.ProductDate</div> | |||
| <div>保 质 期:@Model.ExpirationTime</div> | |||
| <div>生产厂家:@Model.ProductCompany</div> | |||
| <div>生产厂址:@Model.CompanyAddress</div> | |||
| <div>电 话:@Model.CompanyTel</div> | |||
| <h2>追溯信息</h2> | |||
| <div>生猪产地:@Model.PigFarmAddress</div> | |||
| <div>动检证号:@Model.TestingNo</div> | |||
| <div>动检结果:@Model.TestingResult</div> | |||
| <div>动检人员:@Model.TestingMan</div> | |||
| <div>养 殖 户:@Model.Farmer</div> | |||
| <div>屠宰批次:@Model.ButcherBatch</div> | |||
| <div>屠宰时间:@Model.ButcherTime</div> | |||
| <div>入库时间:@Model.InStoreDate</div> | |||
| <div>发货时间:@Model.SendDate</div> | |||
| <div>发货客户:@Model.SendCustomer</div> | |||
| <div>货运车牌:@Model.CarNo</div> | |||
| </div> | |||
| </body> | |||
| </html> | |||
| @ -0,0 +1,84 @@ | |||
| @model ButcherTraceBack.Models.TraceBackInfo | |||
| @{ | |||
| Layout = null; | |||
| } | |||
| <!DOCTYPE html> | |||
| <html> | |||
| <head> | |||
| <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=0.5, maximum-scale=2.0, user-scalable=yes" /> | |||
| <title>追溯信息 @Model.Code</title> | |||
| <link href="css/lrtk.css" rel="stylesheet" /> | |||
| <script src="js/jquery-3.2.0.js"></script> | |||
| </head> | |||
| <body> | |||
| <div class="flex"> | |||
| <ul class="slides"> | |||
| <li> | |||
| <img src="images/wanfu01.jpg"> | |||
| </li> | |||
| <li> | |||
| <div style="position:relative;width:100%;height:100%;"> | |||
| <img src="images/wanfu02.jpg"> | |||
| <p style="position: absolute; left:10%;bottom:10%;"> | |||
| 商品名称: @Model.Goods_Name | |||
| </p> | |||
| <p style="position: absolute; left:10%;bottom:5%;">生产日期: @Model.SendDate</p> | |||
| </div> | |||
| </li> | |||
| <li> | |||
| <img src="images/wanfu03.jpg"> | |||
| </li> | |||
| <li> | |||
| <img src="images/wanfu04.jpg"> | |||
| </li> | |||
| <li> | |||
| <img src="images/wanfu05.jpg"> | |||
| </li> | |||
| <li> | |||
| <img src="images/wanfu06.jpg"> | |||
| </li> | |||
| <li> | |||
| <div style="position:relative;width:100%;height:100%;"> | |||
| <img src="images/wanfu07.jpg"> | |||
| <p style="position: absolute; left:10%;bottom:8%;">检验日期: @Model.SendDate</p> | |||
| </div> | |||
| </li> | |||
| <li> | |||
| <div style="position:relative;width:100%;height:100%;"> | |||
| <img src="images/wanfu08.jpg"> | |||
| <p style="position: absolute; left:10%;bottom:8%;">出厂日期: @Model.SendDate</p> | |||
| </div> | |||
| </li> | |||
| <li> | |||
| <div style="position:relative;width:100%;height:100%;"> | |||
| <img src="images/wanfu09.jpg"> | |||
| <table style="position:absolute; left:5%;top:28%;line-height:26px"> | |||
| <tr><td>生猪产地:@Model.PigFarmAddress </td></tr> | |||
| <tr><td>动检证号:@Model.TestingNo </td></tr> | |||
| <tr><td>动检结果:@Model.TestingResult </td></tr> | |||
| <tr><td>动检人员:@Model.TestingMan </td></tr> | |||
| <tr><td>养 殖 户:@Model.Farmer </td></tr> | |||
| <tr><td>生猪定点屠宰代码:260912011</td></tr> | |||
| <tr><td>屠宰批次:@Model.ButcherBatch </td></tr> | |||
| <tr><td>发货客户:@Model.SendCustomer </td></tr> | |||
| <tr><td>货运车牌:@Model.CarNo </td></tr> | |||
| </table> | |||
| @*</p>*@ | |||
| </div> | |||
| </li> | |||
| </ul> | |||
| </div> | |||
| <script src="js/jflex.js"></script> | |||
| <script type="text/javascript"> | |||
| $('.flex').jFlex({ | |||
| autoplay: true | |||
| }); | |||
| </script> | |||
| </body> | |||
| </html> | |||
| @ -0,0 +1,84 @@ | |||
| @model ButcherTraceBack.Models.FreshTraceBack | |||
| @{ | |||
| Layout = null; | |||
| } | |||
| <!DOCTYPE html> | |||
| <html> | |||
| <head> | |||
| <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=0.5, maximum-scale=2.0, user-scalable=yes" /> | |||
| <title>追溯信息 @Model.Code</title> | |||
| <link href="css/lrtk.css" rel="stylesheet" /> | |||
| <script src="js/jquery-3.2.0.js"></script> | |||
| </head> | |||
| <body> | |||
| <div class="flex"> | |||
| <ul class="slides"> | |||
| <li> | |||
| <img src="images/wanfu01.jpg"> | |||
| </li> | |||
| <li> | |||
| <div style="position:relative;width:100%;height:100%;"> | |||
| <img src="images/wanfu02.jpg"> | |||
| <p style="position: absolute; left:10%;bottom:10%;"> | |||
| <span>商品名称: @Model.Goods_Name</span><span style="padding-left:30px;">规格:@Model.Goods_Spec</span> | |||
| </p> | |||
| <p style="position: absolute; left:10%;bottom:5%;"> | |||
| <span>重量:@Model.Weight KG</span><span style="padding-left:30px;">生产日期: @Model.ProductDate</span> | |||
| </p> | |||
| </div> | |||
| </li> | |||
| <li> | |||
| <img src="images/wanfu03.jpg"> | |||
| </li> | |||
| <li> | |||
| <img src="images/wanfu04.jpg"> | |||
| </li> | |||
| <li> | |||
| <img src="images/wanfu05.jpg"> | |||
| </li> | |||
| <li> | |||
| <img src="images/wanfu06.jpg"> | |||
| </li> | |||
| <li> | |||
| <div style="position:relative;width:100%;height:100%;"> | |||
| <img src="images/wanfu07.jpg"> | |||
| <p style="position: absolute; left:10%;bottom:8%;">检验日期: @Model.ProductDate</p> | |||
| </div> | |||
| </li> | |||
| <li> | |||
| <div style="position:relative;width:100%;height:100%;"> | |||
| <img src="images/wanfu08.jpg"> | |||
| @*<p style="position: absolute; left:10%;bottom:8%;">出厂日期: @Model.SendDate</p>*@ | |||
| </div> | |||
| </li> | |||
| <li> | |||
| <div style="position:relative;width:100%;height:100%;"> | |||
| <img src="images/wanfu09.jpg"> | |||
| <table style="position:absolute; left:5%;top:28%;line-height:26px"> | |||
| <tr><td>养 殖 场:@Model.Farm_Name </td></tr> | |||
| <tr><td>动检结果:@Model.TestingResult </td></tr> | |||
| <tr><td>动检人员:@Model.TestingMan </td></tr> | |||
| <tr><td>屠宰日期:@Model.ButcherDate </td></tr> | |||
| @*<tr><td>生产批次:@Model.ProductBatch </td></tr>*@ | |||
| <tr><td>入库日期:@Model.InStoreDate </td></tr> | |||
| @*<tr><td>发货时间:@Model.SendDate </td></tr>*@ | |||
| <tr><td>发货客户:@Model.SendCustomer </td></tr> | |||
| @*<tr><td>货运车牌:@Model.CarNo </td></tr>*@ | |||
| </table> | |||
| </div> | |||
| </li> | |||
| </ul> | |||
| </div> | |||
| <script src="js/jflex.js"></script> | |||
| <script type="text/javascript"> | |||
| $('.flex').jFlex({ | |||
| autoplay: true | |||
| }); | |||
| </script> | |||
| </body> | |||
| </html> | |||
| @ -0,0 +1,58 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | |||
| <configuration> | |||
| <configSections> | |||
| <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"> | |||
| <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" /> | |||
| <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" /> | |||
| </sectionGroup> | |||
| </configSections> | |||
| <system.web.webPages.razor> | |||
| <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> | |||
| <pages pageBaseType="System.Web.Mvc.WebViewPage"> | |||
| <namespaces> | |||
| <add namespace="System.Web.Mvc" /> | |||
| <add namespace="System.Web.Mvc.Ajax" /> | |||
| <add namespace="System.Web.Mvc.Html" /> | |||
| <add namespace="System.Web.Routing" /> | |||
| </namespaces> | |||
| </pages> | |||
| </system.web.webPages.razor> | |||
| <appSettings> | |||
| <add key="webpages:Enabled" value="false" /> | |||
| </appSettings> | |||
| <system.web> | |||
| <httpHandlers> | |||
| <add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/> | |||
| </httpHandlers> | |||
| <!-- | |||
| 在视图页面中启用请求验证将导致验证在 | |||
| 控制器已对输入进行处理后发生。默认情况下, | |||
| MVC 在控制器处理输入前执行请求验证。 | |||
| 若要更改此行为,请对控制器或操作 | |||
| 应用 ValidateInputAttribute。 | |||
| --> | |||
| <pages | |||
| validateRequest="false" | |||
| pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" | |||
| pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" | |||
| userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"> | |||
| <controls> | |||
| <add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" /> | |||
| </controls> | |||
| </pages> | |||
| </system.web> | |||
| <system.webServer> | |||
| <validation validateIntegratedModeConfiguration="false" /> | |||
| <handlers> | |||
| <remove name="BlockViewHandler"/> | |||
| <add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" /> | |||
| </handlers> | |||
| </system.webServer> | |||
| </configuration> | |||
| @ -0,0 +1,68 @@ | |||
| <!DOCTYPE html> | |||
| <html> | |||
| <head> | |||
| <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=0.5, maximum-scale=2.0, user-scalable=yes" /> | |||
| <title>青岛万福食品股份有限公司流通追溯平台</title> | |||
| <link href="css/lrtk.css" rel="stylesheet" /> | |||
| <script src="js/jquery-3.2.0.js"></script> | |||
| </head> | |||
| <body> | |||
| <!-- 代码 开始 --> | |||
| <div class="flex"> | |||
| <ul class="slides"> | |||
| <li> | |||
| <img src="images/01.jpg"> | |||
| </li> | |||
| <li> | |||
| <div style="position:relative;width:100%;height:100%;"> | |||
| <img src="images/02.jpg"> | |||
| <p style="position: absolute; left:30%;top:78%;"> | |||
| 鲜一级白条 | |||
| </p> | |||
| <p style="position: absolute; left:30%;top:83%;">2018年4月21日</p> | |||
| </div> | |||
| </li> | |||
| <li> | |||
| <div style="position:relative;width:100%;height:100%;"> | |||
| <img src="images/05.jpg"> | |||
| <p style="position: absolute; left:30%;top:78%;"> | |||
| 鲜一级白条 | |||
| </p> | |||
| <p style="position: absolute; left:30%;top:83%;">2018年4月21日</p> | |||
| </div> | |||
| </li> | |||
| <li> | |||
| <div style="position:relative;width:100%;height:100%;"> | |||
| <img src="images/06.jpg"> | |||
| <p style="position: absolute; left:30%;top:78%;"> | |||
| 鲜一级白条 | |||
| </p> | |||
| <p style="position: absolute; left:30%;top:83%;">2018年4月21日</p> | |||
| </div> | |||
| </li> | |||
| <li> | |||
| <div style="position:relative;width:100%;height:100%;"> | |||
| <img src="images/08.jpg"> | |||
| <p style="position: absolute; left:15%;top:36%;"> | |||
| 水滴是刘慈欣科幻小说《三体》中提到的三体人制造的由强相互作用力材料(SIM)所制成的宇宙探测器,因为其形状与水滴相似所以被人类称之为水滴 | |||
| </p> | |||
| </div> | |||
| </li> | |||
| </ul> | |||
| </div> | |||
| <script src="js/jflex.js"></script> | |||
| <script type="text/javascript"> | |||
| $('.flex').jFlex({ | |||
| autoplay: true | |||
| }); | |||
| </script> | |||
| <!-- 代码 结束 --> | |||
| </body> | |||
| </html> | |||
| @ -0,0 +1,30 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | |||
| <!-- 有关使用 web.config 转换的详细信息,请访问 http://go.microsoft.com/fwlink/?LinkId=125889 --> | |||
| <configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> | |||
| <!-- | |||
| 在下例中,“SetAttributes”转换将更改 | |||
| “connectionString”的值,仅在“Match”定位器 | |||
| 查找到值为“MyDB”的特性“name”时使用“ReleaseSQLServer”。 | |||
| <connectionStrings> | |||
| <add name="MyDB" | |||
| connectionString="Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True" | |||
| xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/> | |||
| </connectionStrings> | |||
| --> | |||
| <system.web> | |||
| <!-- | |||
| 在下例中,“Replace”转换将替换 | |||
| Web.config 文件的整个 <customErrors> 节。 | |||
| 请注意,由于 | |||
| 在 <system.web> 节点下仅有一个 customErrors 节,因此不需要使用“xdt:Locator”特性。 | |||
| <customErrors defaultRedirect="GenericError.htm" | |||
| mode="RemoteOnly" xdt:Transform="Replace"> | |||
| <error statusCode="500" redirect="InternalError.htm"/> | |||
| </customErrors> | |||
| --> | |||
| </system.web> | |||
| </configuration> | |||
| @ -0,0 +1,31 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | |||
| <!-- 有关使用 web.config 转换的详细信息,请访问 http://go.microsoft.com/fwlink/?LinkId=125889 --> | |||
| <configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> | |||
| <!-- | |||
| 在下例中,“SetAttributes”转换将更改 | |||
| “connectionString”的值,仅在“Match”定位器 | |||
| 查找到值为“MyDB”的特性“name”时使用“ReleaseSQLServer”。 | |||
| <connectionStrings> | |||
| <add name="MyDB" | |||
| connectionString="Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True" | |||
| xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/> | |||
| </connectionStrings> | |||
| --> | |||
| <system.web> | |||
| <compilation xdt:Transform="RemoveAttributes(debug)" /> | |||
| <!-- | |||
| 在下例中,“Replace”转换将替换 | |||
| Web.config 文件的整个 <customErrors> 节。 | |||
| 请注意,由于 | |||
| 在 <system.web> 节点下仅有一个 customErrors 节,因此不需要使用“xdt:Locator”特性。 | |||
| <customErrors defaultRedirect="GenericError.htm" | |||
| mode="RemoteOnly" xdt:Transform="Replace"> | |||
| <error statusCode="500" redirect="InternalError.htm"/> | |||
| </customErrors> | |||
| --> | |||
| </system.web> | |||
| </configuration> | |||
| @ -0,0 +1,48 @@ | |||
| <?xml version="1.0"?> | |||
| <configuration> | |||
| <connectionStrings> | |||
| <add name="DbConnection" providerName="System.Data.SqlClient" connectionString="Server=(local);Database=ButcherTraceBack;Integrated Security=true;Language=Simplified Chinese;"/> | |||
| </connectionStrings> | |||
| <system.web> | |||
| <compilation debug="true"/> | |||
| </system.web> | |||
| </configuration> | |||
| <!--<configuration> | |||
| <appSettings> | |||
| <add key="webpages:Version" value="2.0.0.0" /> | |||
| <add key="webpages:Enabled" value="false" /> | |||
| <add key="PreserveLoginUrl" value="true" /> | |||
| <add key="ClientValidationEnabled" value="true" /> | |||
| <add key="UnobtrusiveJavaScriptEnabled" value="true" /> | |||
| </appSettings> | |||
| <system.web> | |||
| <compilation debug="true" targetFramework="4.0" /> | |||
| <pages> | |||
| <namespaces> | |||
| <add namespace="System.Web.Helpers" /> | |||
| <add namespace="System.Web.Mvc" /> | |||
| <add namespace="System.Web.Mvc.Ajax" /> | |||
| <add namespace="System.Web.Mvc.Html" /> | |||
| <add namespace="System.Web.Routing" /> | |||
| <add namespace="System.Web.WebPages" /> | |||
| </namespaces> | |||
| </pages> | |||
| </system.web> | |||
| <system.webServer> | |||
| <validation validateIntegratedModeConfiguration="false" /> | |||
| <modules runAllManagedModulesForAllRequests="true" /> | |||
| <handlers> | |||
| <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" /> | |||
| <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" /> | |||
| <remove name="ExtensionlessUrlHandler-Integrated-4.0" /> | |||
| <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" /> | |||
| <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" /> | |||
| <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /> | |||
| </handlers></system.webServer> | |||
| </configuration>--> | |||
| @ -0,0 +1,76 @@ | |||
| body { font-family: Roboto} | |||
| .flex { margin: -32px -8px -8px; max-width: 768px; } | |||
| .slides,.slides--titles { | |||
| margin:0; | |||
| padding:0 | |||
| } | |||
| .slides li,.slides--titles li { | |||
| overflow:hidden; | |||
| position:relative; | |||
| float:left | |||
| } | |||
| .jFlex,.slides,.slides li,.slides--titles li { | |||
| position:relative | |||
| } | |||
| .jFlex { | |||
| overflow:hidden; | |||
| -webkit-touch-callout:none; | |||
| -webkit-user-select:none; | |||
| -khtml-user-select:none; | |||
| -moz-user-select:none; | |||
| -ms-user-select:none; | |||
| user-select:none | |||
| } | |||
| .slides { | |||
| list-style:none | |||
| } | |||
| .slides--anim { | |||
| -moz-transition:transform ease-out .3s; | |||
| -ms-transition:transform ease-out .3s; | |||
| -o-transition:transform ease-out .3s; | |||
| -webkit-transition:transform ease-out .3s; | |||
| transition:transform ease-out .3s | |||
| } | |||
| .slides--titles:after,.slides--titles:before,.slides:after,.slides:before { | |||
| content:' '; | |||
| display:table | |||
| } | |||
| .slides--titles:after,.slides:after { | |||
| clear:both | |||
| } | |||
| .slides li { | |||
| display:block | |||
| } | |||
| .slides img { | |||
| display:block; | |||
| height:auto; | |||
| max-width:100% | |||
| } | |||
| .slides--titles li { | |||
| background:#ffffff; | |||
| cursor:pointer; | |||
| text-align:center; | |||
| -moz-transition:background linear .3s; | |||
| -ms-transition:background linear .3s; | |||
| -o-transition:background linear .3s; | |||
| -webkit-transition:background linear .3s; | |||
| transition:background linear .3s; | |||
| } | |||
| .slides--titles li .title--l { | |||
| background:#ffffff; | |||
| display:block; | |||
| height:4px; | |||
| left:-100%; | |||
| position:relative | |||
| } | |||
| .slides--titles li .title--t { | |||
| color:#ffffff; | |||
| display:block; | |||
| height:0px; | |||
| line-height:0px; | |||
| padding:0 10px; | |||
| overflow:hidden; | |||
| text-overflow:ellipsis; | |||
| white-space:nowrap | |||
| } | |||
| @ -0,0 +1 @@ | |||
| !function (t) { function i(i, e) { function l(i, e) { var l = "number" == typeof i ? i : t(this).index(), s = l ? "transform: translate3d(-" + l * h.slideWidth + "px, 0, 0); " : "", n = "width: " + h.slideCount * h.slideWidth + "px"; h.index = l, h.$slider.attr("style", s + n), "number" != typeof i && h.autoMode && clearInterval(h.autoMode), h.$slideTitles.find("li").attr("class", ""), e ? 0 === l ? (h.$slideTitles.find("li:eq(" + (h.slideCount - 1) + ")").attr("class", "title--auto title--right"), h.$slideTitles.find("li:eq(" + l + ")").attr("class", "title--active title--auto")) : (h.$slideTitles.find("li:eq(" + (l - 1) + ")").attr("class", e ? "title--right title--auto" : "title--right"), h.$slideTitles.find("li:eq(" + l + ")").attr("class", e ? "title--active title--auto" : "title--active")) : h.$slideTitles.find("li:eq(" + l + ")").attr("class", "title--active"), h.$el.offset().height } function s() { var t = 0; h.autoMode = setInterval(function () { t = t === h.slideCount - 1 ? 0 : t + 1, l(t, !0) }, h.options.timing), h.$slideTitles.children().first().attr("class", "title--active title--auto") } function n() { h.$slideTitles.children().first().attr("class", "title--active") } function d() { h.$slideTitles.children().bind("click", l), h.$slides.find("img").bind("dragstart", function (t) { t.preventDefault() }), t(window).bind("resize orientationchange", u) } function a() { function t(t) { h.autoMode && clearInterval(h.autoMode); var l = "mousedown" === t.type ? t.originalEvent : t.originalEvent.touches[0]; n = l.pageX, h.$slider.bind("touchmove", i).bind("mousemove", i).bind("mouseleave", e).bind("mouseup", e).bind("touchend", e).bind("touchcancel", e).removeClass("slides--anim"), h.$slideTitles.children().removeClass("title--auto") } function i(t) { var i = "touchmove" === t.type ? t.originalEvent.touches[0] : t.originalEvent, e = i.pageX; d = Math.round(e - n), s = 0 > d ? "<" : ">"; var l = h.index * -h.slideWidth + d; ">" === s && 0 === h.index || "<" === s && h.index === h.slideCount - 1 || h.$slider.attr("style", "width: " + h.slideWidth * h.slideCount + "px; transform: translate3d(" + l + "px, 0, 0)") } function e(t) { var a = "<" === s ? h.index + 1 : h.index - 1, o = "touchend" === t.type || "touchcancel" === t.type ? t.originalEvent.changedTouches[0] : t.originalEvent, r = o.pageX, u = h.index * h.slideWidth; return d = Math.round(r - n), h.$slider.unbind("touchmove", i).unbind("mousemove", i).unbind("mouseleave", e).unbind("mouseup", e).unbind("touchend", e).unbind("touchcancel", e).addClass("slides--anim"), ">" === s && 0 === h.index || "<" === s && h.index === h.slideCount - 1 ? void 0 : d > 140 || -140 > d ? void l(a) : void h.$slider.attr("style", "width: " + h.slideWidth * h.slideCount + "px; transform: translate3d(-" + u + "px, 0, 0)") } var s, n, d = 0; h.$slider.bind("touchstart", t), h.$slider.bind("mousedown", t) } function o() { h.$el.addClass("jFlex"), h.$slider = h.$el.children(), h.$slides = h.$slider.children(), h.slideCount = h.$slides.length, h.slideWidth = h.$el.width(), h.$slides.width(h.slideWidth + "px"), h.$el.children().width(h.slideCount * h.slideWidth + "px"), h.$slideTitles = t('<ul class="slides--titles"></ul>') } function r() { h.$slider.addClass("slides--anim") } function u() { var t = h.index ? "transform: translate3d(-" + h.index * h.slideWidth + "px, 0, 0); " : ""; h.slideWidth = h.$el.width(), h.$slider.attr("style", t + "width: " + h.slideCount * h.slideWidth + "px"), h.$slides.width(h.slideWidth + "px") } function c() { var i; "bottom" === h.options.titles ? (h.$el.append(h.$slideTitles), i = '<li data-title="{{i}}"><span class="title--l"></span><span class="title--t">{{title}}</span></li>') : (h.$el.prepend(h.$slideTitles), i = '<li data-title="{{i}}"><span class="title--t">{{title}}</span><span class="title--l"></span></li>'); for (var e = "", l = 0; l < h.slideCount; l++) { var s = t(h.$slides[l]).attr("data-title") ? t(h.$slides[l]).attr("data-title") : ""; e += i.replace("{{i}}", l).replace("{{title}}", s) } h.$slideTitles.append(e); var n = (h.$slideTitles.height(), "6"); (2 === h.$slides.length || 3 === h.$slides.length || 4 === h.$slides.length || 5 === h.$slides.length) && (n = h.$slides.length) } var h = this; h.autoMode = null, h.el = i, h.$el = t(i), h.index = 0, h.defaultOptions = { autoplay: !1, fx: "slide", timing: 5e3, titles: "top" }, h.options = t.extend({}, h.defaultOptions, e), h.init = function () { return o(), h.slideCount < 2 ? void console.error("Your HTML must contain at least two slides to flex.") : (c(), d(), "string" == typeof h.options.fx && "slide" === h.options.fx && (r(), a()), void (h.options.autoplay ? s() : n())) }, h.init() } t.fn.jFlex = function (t) { return this.each(function () { new i(this, t) }) } }(jQuery); | |||
| @ -0,0 +1,59 @@ | |||
| USE [ButcherTraceBack] | |||
| GO | |||
| /****** Object: Table [dbo].[CarcassTraceInfo] Script Date: 2018/4/14 13:56:41 ******/ | |||
| SET ANSI_NULLS ON | |||
| GO | |||
| SET QUOTED_IDENTIFIER ON | |||
| GO | |||
| CREATE TABLE [dbo].[CarcassTraceInfo]( | |||
| [Code] [nvarchar](50) NOT NULL, | |||
| [Goods_Name] [nvarchar](50) NULL, | |||
| [ProductDate] [nvarchar](50) NULL, | |||
| [ExpirationTime] [nvarchar](50) NULL, | |||
| [ProductCompany] [nvarchar](500) NULL, | |||
| [CompanyAddress] [nvarchar](500) NULL, | |||
| [CompanyTel] [nvarchar](50) NULL, | |||
| [PigFarmAddress] [nvarchar](500) NULL, | |||
| [TestingNo] [nvarchar](100) NULL, | |||
| [TestingResult] [nvarchar](50) NULL, | |||
| [TestingMan] [nvarchar](50) NULL, | |||
| [Farmer] [nvarchar](50) NULL, | |||
| [ButcherBatch] [nvarchar](50) NULL, | |||
| [ButcherTime] [nvarchar](50) NULL, | |||
| [InStoreDate] [nvarchar](50) NULL, | |||
| [SendDate] [nvarchar](50) NULL, | |||
| [SendCustomer] [nvarchar](50) NULL, | |||
| [CarNo] [nvarchar](50) NULL, | |||
| CONSTRAINT [PK_CarcassTraceInfo] PRIMARY KEY CLUSTERED | |||
| ( | |||
| [Code] ASC | |||
| )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] | |||
| ) ON [PRIMARY] | |||
| CREATE TABLE [dbo].[FreshTraceBack]( | |||
| [Code] [nvarchar](50) NOT NULL, | |||
| [Goods_Name] [nvarchar](50) NULL, | |||
| [Goods_Spec] [nvarchar](50) NULL, | |||
| [Weight] [nvarchar](50) NULL, | |||
| [ButcherDate] [nvarchar](50) NULL, | |||
| [ProductDate] [nvarchar](50) NULL, | |||
| [Farm_Name] [nvarchar](500) NULL, | |||
| [TestingResult] [nvarchar](50) NULL, | |||
| [TestingMan] [nvarchar](50) NULL, | |||
| [ProductBatch] [nvarchar](50) NULL, | |||
| [InStoreDate] [nvarchar](50) NULL, | |||
| [SendDate] [nvarchar](50) NULL, | |||
| [SendCustomer] [nvarchar](50) NULL, | |||
| [CarNo] [nvarchar](50) NULL, | |||
| CONSTRAINT [PK_FreshTraceBack] PRIMARY KEY CLUSTERED | |||
| ( | |||
| [Code] ASC | |||
| )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] | |||
| ) ON [PRIMARY] | |||
| GO | |||
| @ -0,0 +1,5 @@ | |||
| <configuration> | |||
| <configSections> | |||
| <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> | |||
| </configSections> | |||
| </configuration> | |||
| @ -0,0 +1,5 @@ | |||
| <configuration> | |||
| <configSections> | |||
| <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> | |||
| </configSections> | |||
| </configuration> | |||
| @ -0,0 +1,777 @@ | |||
| # Copyright (c) Microsoft Corporation. All rights reserved. | |||
| $InitialDatabase = '0' | |||
| $knownExceptions = @( | |||
| 'System.Data.Entity.Migrations.Infrastructure.MigrationsException', | |||
| 'System.Data.Entity.Migrations.Infrastructure.AutomaticMigrationsDisabledException', | |||
| 'System.Data.Entity.Migrations.Infrastructure.AutomaticDataLossException', | |||
| 'System.Data.Entity.Migrations.MigrationsPendingException', | |||
| 'System.Data.Entity.Migrations.ProjectTypeNotSupportedException' | |||
| ) | |||
| <# | |||
| .SYNOPSIS | |||
| Enables Code First Migrations in a project. | |||
| .DESCRIPTION | |||
| Enables Migrations by scaffolding a migrations configuration class in the project. If the | |||
| target database was created by an initializer, an initial migration will be created (unless | |||
| automatic migrations are enabled via the EnableAutomaticMigrations parameter). | |||
| .PARAMETER ContextTypeName | |||
| Specifies the context to use. If omitted, migrations will attempt to locate a | |||
| single context type in the target project. | |||
| .PARAMETER EnableAutomaticMigrations | |||
| Specifies whether automatic migrations will be enabled in the scaffolded migrations configuration. | |||
| If ommitted, automatic migrations will be disabled. | |||
| .PARAMETER ProjectName | |||
| Specifies the project that the scaffolded migrations configuration class will | |||
| be added to. If omitted, the default project selected in package manager | |||
| console is used. | |||
| .PARAMETER StartUpProjectName | |||
| Specifies the configuration file to use for named connection strings. If | |||
| omitted, the specified project's configuration file is used. | |||
| .PARAMETER ConnectionStringName | |||
| Specifies the name of a connection string to use from the application's | |||
| configuration file. | |||
| .PARAMETER ConnectionString | |||
| Specifies the the connection string to use. If omitted, the context's | |||
| default connection will be used. | |||
| .PARAMETER ConnectionProviderName | |||
| Specifies the provider invariant name of the connection string. | |||
| .PARAMETER Force | |||
| Specifies that the migrations configuration be overwritten when running more | |||
| than once for a given project. | |||
| #> | |||
| function Enable-Migrations | |||
| { | |||
| [CmdletBinding(DefaultParameterSetName = 'ConnectionStringName')] | |||
| param ( | |||
| [string] $ContextTypeName, | |||
| [alias('Auto')] | |||
| [switch] $EnableAutomaticMigrations, | |||
| [string] $ProjectName, | |||
| [string] $StartUpProjectName, | |||
| [parameter(ParameterSetName = 'ConnectionStringName')] | |||
| [string] $ConnectionStringName, | |||
| [parameter(ParameterSetName = 'ConnectionStringAndProviderName', | |||
| Mandatory = $true)] | |||
| [string] $ConnectionString, | |||
| [parameter(ParameterSetName = 'ConnectionStringAndProviderName', | |||
| Mandatory = $true)] | |||
| [string] $ConnectionProviderName, | |||
| [switch] $Force | |||
| ) | |||
| $runner = New-MigrationsRunner $ProjectName $StartUpProjectName $null $ConnectionStringName $ConnectionString $ConnectionProviderName | |||
| try | |||
| { | |||
| Invoke-RunnerCommand $runner System.Data.Entity.Migrations.EnableMigrationsCommand @( $EnableAutomaticMigrations.IsPresent, $Force.IsPresent ) @{ 'ContextTypeName' = $ContextTypeName } | |||
| $error = Get-RunnerError $runner | |||
| if ($error) | |||
| { | |||
| if ($knownExceptions -notcontains $error.TypeName) | |||
| { | |||
| Write-Host $error.StackTrace | |||
| } | |||
| throw $error.Message | |||
| } | |||
| } | |||
| finally | |||
| { | |||
| Remove-Runner $runner | |||
| } | |||
| } | |||
| <# | |||
| .SYNOPSIS | |||
| Scaffolds a migration script for any pending model changes. | |||
| .DESCRIPTION | |||
| Scaffolds a new migration script and adds it to the project. | |||
| .PARAMETER Name | |||
| Specifies the name of the custom script. | |||
| .PARAMETER Force | |||
| Specifies that the migration user code be overwritten when re-scaffolding an | |||
| existing migration. | |||
| .PARAMETER ProjectName | |||
| Specifies the project that contains the migration configuration type to be | |||
| used. If ommitted, the default project selected in package manager console | |||
| is used. | |||
| .PARAMETER StartUpProjectName | |||
| Specifies the configuration file to use for named connection strings. If | |||
| omitted, the specified project's configuration file is used. | |||
| .PARAMETER ConfigurationTypeName | |||
| Specifies the migrations configuration to use. If omitted, migrations will | |||
| attempt to locate a single migrations configuration type in the target | |||
| project. | |||
| .PARAMETER ConnectionStringName | |||
| Specifies the name of a connection string to use from the application's | |||
| configuration file. | |||
| .PARAMETER ConnectionString | |||
| Specifies the the connection string to use. If omitted, the context's | |||
| default connection will be used. | |||
| .PARAMETER ConnectionProviderName | |||
| Specifies the provider invariant name of the connection string. | |||
| .PARAMETER IgnoreChanges | |||
| Scaffolds an empty migration ignoring any pending changes detected in the current model. | |||
| This can be used to create an initial, empty migration to enable Migrations for an existing | |||
| database. N.B. Doing this assumes that the target database schema is compatible with the | |||
| current model. | |||
| #> | |||
| function Add-Migration | |||
| { | |||
| [CmdletBinding(DefaultParameterSetName = 'ConnectionStringName')] | |||
| param ( | |||
| [parameter(Position = 0, | |||
| Mandatory = $true)] | |||
| [string] $Name, | |||
| [switch] $Force, | |||
| [string] $ProjectName, | |||
| [string] $StartUpProjectName, | |||
| [string] $ConfigurationTypeName, | |||
| [parameter(ParameterSetName = 'ConnectionStringName')] | |||
| [string] $ConnectionStringName, | |||
| [parameter(ParameterSetName = 'ConnectionStringAndProviderName', | |||
| Mandatory = $true)] | |||
| [string] $ConnectionString, | |||
| [parameter(ParameterSetName = 'ConnectionStringAndProviderName', | |||
| Mandatory = $true)] | |||
| [string] $ConnectionProviderName, | |||
| [switch] $IgnoreChanges) | |||
| $runner = New-MigrationsRunner $ProjectName $StartUpProjectName $ConfigurationTypeName $ConnectionStringName $ConnectionString $ConnectionProviderName | |||
| try | |||
| { | |||
| Invoke-RunnerCommand $runner System.Data.Entity.Migrations.AddMigrationCommand @( $Name, $Force.IsPresent, $IgnoreChanges.IsPresent ) | |||
| $error = Get-RunnerError $runner | |||
| if ($error) | |||
| { | |||
| if ($knownExceptions -notcontains $error.TypeName) | |||
| { | |||
| Write-Host $error.StackTrace | |||
| } | |||
| throw $error.Message | |||
| } | |||
| } | |||
| finally | |||
| { | |||
| Remove-Runner $runner | |||
| } | |||
| } | |||
| <# | |||
| .SYNOPSIS | |||
| Applies any pending migrations to the database. | |||
| .DESCRIPTION | |||
| Updates the database to the current model by applying pending migrations. | |||
| .PARAMETER SourceMigration | |||
| Only valid with -Script. Specifies the name of a particular migration to use | |||
| as the update's starting point. If ommitted, the last applied migration in | |||
| the database will be used. | |||
| .PARAMETER TargetMigration | |||
| Specifies the name of a particular migration to update the database to. If | |||
| ommitted, the current model will be used. | |||
| .PARAMETER Script | |||
| Generate a SQL script rather than executing the pending changes directly. | |||
| .PARAMETER Force | |||
| Specifies that data loss is acceptable during automatic migration of the | |||
| database. | |||
| .PARAMETER ProjectName | |||
| Specifies the project that contains the migration configuration type to be | |||
| used. If ommitted, the default project selected in package manager console | |||
| is used. | |||
| .PARAMETER StartUpProjectName | |||
| Specifies the configuration file to use for named connection strings. If | |||
| omitted, the specified project's configuration file is used. | |||
| .PARAMETER ConfigurationTypeName | |||
| Specifies the migrations configuration to use. If omitted, migrations will | |||
| attempt to locate a single migrations configuration type in the target | |||
| project. | |||
| .PARAMETER ConnectionStringName | |||
| Specifies the name of a connection string to use from the application's | |||
| configuration file. | |||
| .PARAMETER ConnectionString | |||
| Specifies the the connection string to use. If omitted, the context's | |||
| default connection will be used. | |||
| .PARAMETER ConnectionProviderName | |||
| Specifies the provider invariant name of the connection string. | |||
| #> | |||
| function Update-Database | |||
| { | |||
| [CmdletBinding(DefaultParameterSetName = 'ConnectionStringName')] | |||
| param ( | |||
| [string] $SourceMigration, | |||
| [string] $TargetMigration, | |||
| [switch] $Script, | |||
| [switch] $Force, | |||
| [string] $ProjectName, | |||
| [string] $StartUpProjectName, | |||
| [string] $ConfigurationTypeName, | |||
| [parameter(ParameterSetName = 'ConnectionStringName')] | |||
| [string] $ConnectionStringName, | |||
| [parameter(ParameterSetName = 'ConnectionStringAndProviderName', | |||
| Mandatory = $true)] | |||
| [string] $ConnectionString, | |||
| [parameter(ParameterSetName = 'ConnectionStringAndProviderName', | |||
| Mandatory = $true)] | |||
| [string] $ConnectionProviderName) | |||
| $runner = New-MigrationsRunner $ProjectName $StartUpProjectName $ConfigurationTypeName $ConnectionStringName $ConnectionString $ConnectionProviderName | |||
| try | |||
| { | |||
| Invoke-RunnerCommand $runner System.Data.Entity.Migrations.UpdateDatabaseCommand @( $SourceMigration, $TargetMigration, $Script.IsPresent, $Force.IsPresent, $Verbose.IsPresent ) | |||
| $error = Get-RunnerError $runner | |||
| if ($error) | |||
| { | |||
| if ($knownExceptions -notcontains $error.TypeName) | |||
| { | |||
| Write-Host $error.StackTrace | |||
| } | |||
| throw $error.Message | |||
| } | |||
| } | |||
| finally | |||
| { | |||
| Remove-Runner $runner | |||
| } | |||
| } | |||
| <# | |||
| .SYNOPSIS | |||
| Displays the migrations that have been applied to the target database. | |||
| .DESCRIPTION | |||
| Displays the migrations that have been applied to the target database. | |||
| .PARAMETER ProjectName | |||
| Specifies the project that contains the migration configuration type to be | |||
| used. If ommitted, the default project selected in package manager console | |||
| is used. | |||
| .PARAMETER StartUpProjectName | |||
| Specifies the configuration file to use for named connection strings. If | |||
| omitted, the specified project's configuration file is used. | |||
| .PARAMETER ConfigurationTypeName | |||
| Specifies the migrations configuration to use. If omitted, migrations will | |||
| attempt to locate a single migrations configuration type in the target | |||
| project. | |||
| .PARAMETER ConnectionStringName | |||
| Specifies the name of a connection string to use from the application's | |||
| configuration file. | |||
| .PARAMETER ConnectionString | |||
| Specifies the the connection string to use. If omitted, the context's | |||
| default connection will be used. | |||
| .PARAMETER ConnectionProviderName | |||
| Specifies the provider invariant name of the connection string. | |||
| #> | |||
| function Get-Migrations | |||
| { | |||
| [CmdletBinding(DefaultParameterSetName = 'ConnectionStringName')] | |||
| param ( | |||
| [string] $ProjectName, | |||
| [string] $StartUpProjectName, | |||
| [string] $ConfigurationTypeName, | |||
| [parameter(ParameterSetName = 'ConnectionStringName')] | |||
| [string] $ConnectionStringName, | |||
| [parameter(ParameterSetName = 'ConnectionStringAndProviderName', | |||
| Mandatory = $true)] | |||
| [string] $ConnectionString, | |||
| [parameter(ParameterSetName = 'ConnectionStringAndProviderName', | |||
| Mandatory = $true)] | |||
| [string] $ConnectionProviderName) | |||
| $runner = New-MigrationsRunner $ProjectName $StartUpProjectName $ConfigurationTypeName $ConnectionStringName $ConnectionString $ConnectionProviderName | |||
| try | |||
| { | |||
| Invoke-RunnerCommand $runner System.Data.Entity.Migrations.GetMigrationsCommand | |||
| $error = Get-RunnerError $runner | |||
| if ($error) | |||
| { | |||
| if ($knownExceptions -notcontains $error.TypeName) | |||
| { | |||
| Write-Host $error.StackTrace | |||
| } | |||
| throw $error.Message | |||
| } | |||
| } | |||
| finally | |||
| { | |||
| Remove-Runner $runner | |||
| } | |||
| } | |||
| function New-MigrationsRunner($ProjectName, $StartUpProjectName, $ConfigurationTypeName, $ConnectionStringName, $ConnectionString, $ConnectionProviderName) | |||
| { | |||
| $startUpProject = Get-MigrationsStartUpProject $StartUpProjectName $ProjectName | |||
| Build-Project $startUpProject | |||
| $project = Get-MigrationsProject $ProjectName | |||
| Build-Project $project | |||
| $installPath = Get-EntityFrameworkInstallPath $project | |||
| $toolsPath = Join-Path $installPath tools | |||
| $info = New-Object System.AppDomainSetup -Property @{ | |||
| ShadowCopyFiles = 'true'; | |||
| ApplicationBase = $installPath; | |||
| PrivateBinPath = 'tools' | |||
| } | |||
| $targetFrameworkVersion = (New-Object System.Runtime.Versioning.FrameworkName ($project.Properties.Item('TargetFrameworkMoniker').Value)).Version | |||
| if ($targetFrameworkVersion -lt (New-Object Version @( 4, 5 ))) | |||
| { | |||
| $info.PrivateBinPath += ';lib\net40' | |||
| $dteVersion = [System.Text.RegularExpressions.Regex]::Match($DTE.Version, '^(?<version>\d{1,2}(\.\d{1,2})?)( \(.+\))?$').Groups['version'].Value | |||
| if ((New-Object Version $dteVersion) -lt (New-Object Version @( 11, 0 ))) | |||
| { | |||
| $info.ConfigurationFile = Join-Path $toolsPath 'Redirect.config' | |||
| } | |||
| else | |||
| { | |||
| $info.ConfigurationFile = Join-Path $toolsPath 'Redirect.VS11.config' | |||
| } | |||
| } | |||
| else | |||
| { | |||
| $info.PrivateBinPath += ';lib\net45' | |||
| $info.ConfigurationFile = [AppDomain]::CurrentDomain.SetupInformation.ConfigurationFile | |||
| } | |||
| $domain = [AppDomain]::CreateDomain('Migrations', $null, $info) | |||
| $domain.SetData('project', $project) | |||
| $domain.SetData('startUpProject', $startUpProject) | |||
| $domain.SetData('configurationTypeName', $ConfigurationTypeName) | |||
| $domain.SetData('connectionStringName', $ConnectionStringName) | |||
| $domain.SetData('connectionString', $ConnectionString) | |||
| $domain.SetData('connectionProviderName', $ConnectionProviderName) | |||
| [AppDomain]::CurrentDomain.SetShadowCopyFiles() | |||
| $utilityAssembly = [System.Reflection.Assembly]::LoadFrom((Join-Path $toolsPath EntityFramework.PowerShell.Utility.dll)) | |||
| $dispatcher = $utilityAssembly.CreateInstance( | |||
| 'System.Data.Entity.Migrations.Utilities.DomainDispatcher', | |||
| $false, | |||
| [System.Reflection.BindingFlags]::Instance -bor [System.Reflection.BindingFlags]::Public, | |||
| $null, | |||
| $PSCmdlet, | |||
| $null, | |||
| $null) | |||
| $domain.SetData('efDispatcher', $dispatcher) | |||
| return @{ | |||
| Domain = $domain; | |||
| ToolsPath = $toolsPath | |||
| } | |||
| } | |||
| function Remove-Runner($runner) | |||
| { | |||
| [AppDomain]::Unload($runner.Domain) | |||
| } | |||
| function Invoke-RunnerCommand($runner, $command, $parameters, $anonymousArguments) | |||
| { | |||
| $domain = $runner.Domain | |||
| if ($anonymousArguments) | |||
| { | |||
| $anonymousArguments.GetEnumerator() | %{ | |||
| $domain.SetData($_.Name, $_.Value) | |||
| } | |||
| } | |||
| $domain.CreateInstanceFrom( | |||
| (Join-Path $runner.ToolsPath EntityFramework.PowerShell.dll), | |||
| $command, | |||
| $false, | |||
| 0, | |||
| $null, | |||
| $parameters, | |||
| $null, | |||
| $null) | Out-Null | |||
| } | |||
| function Get-RunnerError($runner) | |||
| { | |||
| $domain = $runner.Domain | |||
| if (!$domain.GetData('wasError')) | |||
| { | |||
| return $null | |||
| } | |||
| return @{ | |||
| Message = $domain.GetData('error.Message'); | |||
| TypeName = $domain.GetData('error.TypeName'); | |||
| StackTrace = $domain.GetData('error.StackTrace') | |||
| } | |||
| } | |||
| function Get-MigrationsProject($name, $hideMessage) | |||
| { | |||
| if ($name) | |||
| { | |||
| return Get-SingleProject $name | |||
| } | |||
| $project = Get-Project | |||
| $projectName = $project.Name | |||
| if (!$hideMessage) | |||
| { | |||
| Write-Verbose "Using NuGet project '$projectName'." | |||
| } | |||
| return $project | |||
| } | |||
| function Get-MigrationsStartUpProject($name, $fallbackName) | |||
| { | |||
| $startUpProject = $null | |||
| if ($name) | |||
| { | |||
| $startUpProject = Get-SingleProject $name | |||
| } | |||
| else | |||
| { | |||
| $startupProjectPaths = $DTE.Solution.SolutionBuild.StartupProjects | |||
| if ($startupProjectPaths) | |||
| { | |||
| if ($startupProjectPaths.Length -eq 1) | |||
| { | |||
| $startupProjectPath = $startupProjectPaths[0] | |||
| if (!(Split-Path -IsAbsolute $startupProjectPath)) | |||
| { | |||
| $solutionPath = Split-Path $DTE.Solution.Properties.Item('Path').Value | |||
| $startupProjectPath = Join-Path $solutionPath $startupProjectPath -Resolve | |||
| } | |||
| $startupProject = Get-SolutionProjects | ?{ | |||
| try | |||
| { | |||
| $fullName = $_.FullName | |||
| } | |||
| catch [NotImplementedException] | |||
| { | |||
| return false; | |||
| } | |||
| if ($fullName -and $fullName.EndsWith('\')) | |||
| { | |||
| $fullName = $fullName.Substring(0, $fullName.Length - 1) | |||
| } | |||
| return $fullName -eq $startupProjectPath | |||
| } | |||
| } | |||
| else | |||
| { | |||
| Write-Verbose 'More than one start-up project found.' | |||
| } | |||
| } | |||
| else | |||
| { | |||
| Write-Verbose 'No start-up project found.' | |||
| } | |||
| } | |||
| if (!($startUpProject -and (Test-StartUpProject $startUpProject))) | |||
| { | |||
| $startUpProject = Get-MigrationsProject $fallbackName $true | |||
| $startUpProjectName = $startUpProject.Name | |||
| Write-Warning "Cannot determine a valid start-up project. Using project '$startUpProjectName' instead. Your configuration file and working directory may not be set as expected. Use the -StartUpProjectName parameter to set one explicitly. Use the -Verbose switch for more information." | |||
| } | |||
| else | |||
| { | |||
| $startUpProjectName = $startUpProject.Name | |||
| Write-Verbose "Using StartUp project '$startUpProjectName'." | |||
| } | |||
| return $startUpProject | |||
| } | |||
| function Get-SolutionProjects() | |||
| { | |||
| $projects = New-Object System.Collections.Stack | |||
| $DTE.Solution.Projects | %{ | |||
| $projects.Push($_) | |||
| } | |||
| while ($projects.Count -ne 0) | |||
| { | |||
| $project = $projects.Pop(); | |||
| # NOTE: This line is similar to doing a "yield return" in C# | |||
| $project | |||
| if ($project.ProjectItems) | |||
| { | |||
| $project.ProjectItems | ?{ $_.SubProject } | %{ | |||
| $projects.Push($_.SubProject) | |||
| } | |||
| } | |||
| } | |||
| } | |||
| function Get-SingleProject($name) | |||
| { | |||
| $project = Get-Project $name | |||
| if ($project -is [array]) | |||
| { | |||
| throw "More than one project '$name' was found. Specify the full name of the one to use." | |||
| } | |||
| return $project | |||
| } | |||
| function Test-StartUpProject($project) | |||
| { | |||
| if ($project.Kind -eq '{cc5fd16d-436d-48ad-a40c-5a424c6e3e79}') | |||
| { | |||
| $projectName = $project.Name | |||
| Write-Verbose "Cannot use start-up project '$projectName'. The Windows Azure Project type isn't supported." | |||
| return $false | |||
| } | |||
| return $true | |||
| } | |||
| function Build-Project($project) | |||
| { | |||
| $configuration = $DTE.Solution.SolutionBuild.ActiveConfiguration.Name | |||
| $DTE.Solution.SolutionBuild.BuildProject($configuration, $project.UniqueName, $true) | |||
| if ($DTE.Solution.SolutionBuild.LastBuildInfo) | |||
| { | |||
| $projectName = $project.Name | |||
| throw "The project '$projectName' failed to build." | |||
| } | |||
| } | |||
| function Get-EntityFrameworkInstallPath($project) | |||
| { | |||
| $package = Get-Package -ProjectName $project.FullName | ?{ $_.Id -eq 'EntityFramework' } | |||
| if (!$package) | |||
| { | |||
| $projectName = $project.Name | |||
| throw "The EntityFramework package is not installed on project '$projectName'." | |||
| } | |||
| return Get-PackageInstallPath $package | |||
| } | |||
| function Get-PackageInstallPath($package) | |||
| { | |||
| $componentModel = Get-VsComponentModel | |||
| $packageInstallerServices = $componentModel.GetService([NuGet.VisualStudio.IVsPackageInstallerServices]) | |||
| $vsPackage = $packageInstallerServices.GetInstalledPackages() | ?{ $_.Id -eq $package.Id -and $_.Version -eq $package.Version } | |||
| return $vsPackage.InstallPath | |||
| } | |||
| Export-ModuleMember @( 'Enable-Migrations', 'Add-Migration', 'Update-Database', 'Get-Migrations' ) -Variable InitialDatabase | |||
| # SIG # Begin signature block | |||
| # MIIaRgYJKoZIhvcNAQcCoIIaNzCCGjMCAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB | |||
| # gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR | |||
| # AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQUc46O5H/xCa1Zd+kKsDgAx0de | |||
| # pNmgghUtMIIEoDCCA4igAwIBAgIKYRnMkwABAAAAZjANBgkqhkiG9w0BAQUFADB5 | |||
| # MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVk | |||
| # bW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSMwIQYDVQQDExpN | |||
| # aWNyb3NvZnQgQ29kZSBTaWduaW5nIFBDQTAeFw0xMTEwMTAyMDMyMjVaFw0xMzAx | |||
| # MTAyMDMyMjVaMIGDMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQ | |||
| # MA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9u | |||
| # MQ0wCwYDVQQLEwRNT1BSMR4wHAYDVQQDExVNaWNyb3NvZnQgQ29ycG9yYXRpb24w | |||
| # ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDuW759ESTjhgbgZv9ItRe9 | |||
| # AuS0DDLwcj59LofXTqGxp0Mv92WeMeEyMUWu18EkhCHXLrWEfvo101Mc17ZRHk/O | |||
| # ZrnrtwwC/SlcraiH9soitNW/CHX1inCPY9fvih7pj0MkZFrTh32QbTusds1XNn3o | |||
| # vBBWrJjwiV0uZMavJgleHmMV8T2/Fo+ZiALDMLfBC2AfD3LM1reoNRKGm6ELCuaT | |||
| # W476VJzB8xlfQo0Snx0/kLcnE4MZMoId89mH1CGyPKK2B0/XJKrujfWz2fr5OU+n | |||
| # 6fKvWVL03EGbLxFwY93q3qrxbSEEEFMzu7JPxeFTskFlR2439rzpmxZBkWsuWzDD | |||
| # AgMBAAGjggEdMIIBGTATBgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQUG1IO | |||
| # 8xEqt8CJwxGBPdSWWLmjU24wDgYDVR0PAQH/BAQDAgeAMB8GA1UdIwQYMBaAFMsR | |||
| # 6MrStBZYAck3LjMWFrlMmgofMFYGA1UdHwRPME0wS6BJoEeGRWh0dHA6Ly9jcmwu | |||
| # bWljcm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01pY0NvZFNpZ1BDQV8wOC0z | |||
| # MS0yMDEwLmNybDBaBggrBgEFBQcBAQROMEwwSgYIKwYBBQUHMAKGPmh0dHA6Ly93 | |||
| # d3cubWljcm9zb2Z0LmNvbS9wa2kvY2VydHMvTWljQ29kU2lnUENBXzA4LTMxLTIw | |||
| # MTAuY3J0MA0GCSqGSIb3DQEBBQUAA4IBAQClWzZsrU6baRLjb4oCm2l3w2xkciiI | |||
| # 2T1FbSwYe9QoLxPiWWobwgs0t4r96rmU7Acx5mr0dQTTp9peOgaeEP2pDb2cUUNv | |||
| # /2eUnOHPfPAksDXMg13u2sBvNknAWgpX9nPhnvPjCEw7Pi/M0s3uTyJw9wQfAqZL | |||
| # m7iPXIgONpRsMwe4qa1RoNDC3I4iEr3D34LXVqH33fClIFcQEJ3urIZ0bHGbwfDy | |||
| # wnBep9ttTTdYmU15QNA0XVolrmfrG05GBrCMKR+jEI+lM58j1fi1Rn3g7mOYkEs+ | |||
| # BagvsBizWaSvQVOOCAUQLSrJOgZMHC6pMVFWZKyazKyXmCmKl5CH6p22MIIEujCC | |||
| # A6KgAwIBAgIKYQUZlgAAAAAAGzANBgkqhkiG9w0BAQUFADB3MQswCQYDVQQGEwJV | |||
| # UzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UE | |||
| # ChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSEwHwYDVQQDExhNaWNyb3NvZnQgVGlt | |||
| # ZS1TdGFtcCBQQ0EwHhcNMTEwNzI1MjA0MjE5WhcNMTIxMDI1MjA0MjE5WjCBszEL | |||
| # MAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1v | |||
| # bmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjENMAsGA1UECxMETU9Q | |||
| # UjEnMCUGA1UECxMebkNpcGhlciBEU0UgRVNOOjlFNzgtODY0Qi0wMzlEMSUwIwYD | |||
| # VQQDExxNaWNyb3NvZnQgVGltZS1TdGFtcCBTZXJ2aWNlMIIBIjANBgkqhkiG9w0B | |||
| # AQEFAAOCAQ8AMIIBCgKCAQEA08s7U6KfRKN6q01WcVOKd6o3k34BPv2rAqNTqf/R | |||
| # sSLFAJDndW7uGOiBDhPF2GEAvh+gdjsEDQTFBKCo/ENTBqEEBLkLkpgCYjjv1DMS | |||
| # 9ys9e++tRVeFlSCf12M0nGJGjr6u4NmeOfapVf3P53fmNRPvXOi/SJNPGkMHWDiK | |||
| # f4UUbOrJ0Et6gm7L0xVgCBSJlKhbPzrJPyB9bS9YGn3Kiji8w8I5aNgtWBoj7SoQ | |||
| # CFogjIKl7dGXRZKFzMM3g98NmHzF07bgmVPYeAj15SMhB2KGWmppGf1w+VM0gfcl | |||
| # MRmGh4vAVZr9qkw1Ff1b6ZXJq1OYKV8speElD2TF8rAndQIDAQABo4IBCTCCAQUw | |||
| # HQYDVR0OBBYEFHkj56ENvlUsaBgpYoJn1vPhNjhaMB8GA1UdIwQYMBaAFCM0+NlS | |||
| # RnAK7UD7dvuzK7DDNbMPMFQGA1UdHwRNMEswSaBHoEWGQ2h0dHA6Ly9jcmwubWlj | |||
| # cm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01pY3Jvc29mdFRpbWVTdGFtcFBD | |||
| # QS5jcmwwWAYIKwYBBQUHAQEETDBKMEgGCCsGAQUFBzAChjxodHRwOi8vd3d3Lm1p | |||
| # Y3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY3Jvc29mdFRpbWVTdGFtcFBDQS5jcnQw | |||
| # EwYDVR0lBAwwCgYIKwYBBQUHAwgwDQYJKoZIhvcNAQEFBQADggEBAEfCdoFbMd1v | |||
| # 0zyZ8npsfpcTUCwFFxsQuEShtYz0Vs+9sCG0ZG1hHNju6Ov1ku5DohhEw/r67622 | |||
| # XH+XbUu1Q/snYXgIVHyx+a+YCrR0xKroLVDEff59TqGZ1icot67Y37GPgyKOzvN5 | |||
| # /GEUbb/rzISw36O7WwW36lT1Yh1sJ6ZjS/rjofq734WWZWlTsLZxmGQmZr3F8Vxi | |||
| # vJH0PZxLQgANzzgFFCZa3CoFS39qmTjY3XOZos6MUCSepOv1P4p4zFSZXSVmpEEG | |||
| # KK9JxLRSlOzeAoNk/k3U/0ui/CmA2+4/qzztM4jKvyJg0Fw7BLAKtJhtPKc6T5rR | |||
| # ARYRYopBdqAwggW8MIIDpKADAgECAgphMyYaAAAAAAAxMA0GCSqGSIb3DQEBBQUA | |||
| # MF8xEzARBgoJkiaJk/IsZAEZFgNjb20xGTAXBgoJkiaJk/IsZAEZFgltaWNyb3Nv | |||
| # ZnQxLTArBgNVBAMTJE1pY3Jvc29mdCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0 | |||
| # eTAeFw0xMDA4MzEyMjE5MzJaFw0yMDA4MzEyMjI5MzJaMHkxCzAJBgNVBAYTAlVT | |||
| # MRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQK | |||
| # ExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xIzAhBgNVBAMTGk1pY3Jvc29mdCBDb2Rl | |||
| # IFNpZ25pbmcgUENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsnJZ | |||
| # XBkwZL8dmmAgIEKZdlNsPhvWb8zL8epr/pcWEODfOnSDGrcvoDLs/97CQk4j1XIA | |||
| # 2zVXConKriBJ9PBorE1LjaW9eUtxm0cH2v0l3511iM+qc0R/14Hb873yNqTJXEXc | |||
| # r6094CholxqnpXJzVvEXlOT9NZRyoNZ2Xx53RYOFOBbQc1sFumdSjaWyaS/aGQv+ | |||
| # knQp4nYvVN0UMFn40o1i/cvJX0YxULknE+RAMM9yKRAoIsc3Tj2gMj2QzaE4BoVc | |||
| # TlaCKCoFMrdL109j59ItYvFFPeesCAD2RqGe0VuMJlPoeqpK8kbPNzw4nrR3XKUX | |||
| # no3LEY9WPMGsCV8D0wIDAQABo4IBXjCCAVowDwYDVR0TAQH/BAUwAwEB/zAdBgNV | |||
| # HQ4EFgQUyxHoytK0FlgByTcuMxYWuUyaCh8wCwYDVR0PBAQDAgGGMBIGCSsGAQQB | |||
| # gjcVAQQFAgMBAAEwIwYJKwYBBAGCNxUCBBYEFP3RMU7TJoqV4ZhgO6gxb6Y8vNgt | |||
| # MBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMB8GA1UdIwQYMBaAFA6sgmBAVieX | |||
| # 5SUT/CrhClOVWeSkMFAGA1UdHwRJMEcwRaBDoEGGP2h0dHA6Ly9jcmwubWljcm9z | |||
| # b2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL21pY3Jvc29mdHJvb3RjZXJ0LmNybDBU | |||
| # BggrBgEFBQcBAQRIMEYwRAYIKwYBBQUHMAKGOGh0dHA6Ly93d3cubWljcm9zb2Z0 | |||
| # LmNvbS9wa2kvY2VydHMvTWljcm9zb2Z0Um9vdENlcnQuY3J0MA0GCSqGSIb3DQEB | |||
| # BQUAA4ICAQBZOT5/Jkav629AsTK1ausOL26oSffrX3XtTDst10OtC/7L6S0xoyPM | |||
| # fFCYgCFdrD0vTLqiqFac43C7uLT4ebVJcvc+6kF/yuEMF2nLpZwgLfoLUMRWzS3j | |||
| # StK8cOeoDaIDpVbguIpLV/KVQpzx8+/u44YfNDy4VprwUyOFKqSCHJPilAcd8uJO | |||
| # +IyhyugTpZFOyBvSj3KVKnFtmxr4HPBT1mfMIv9cHc2ijL0nsnljVkSiUc356aNY | |||
| # Vt2bAkVEL1/02q7UgjJu/KSVE+Traeepoiy+yCsQDmWOmdv1ovoSJgllOJTxeh9K | |||
| # u9HhVujQeJYYXMk1Fl/dkx1Jji2+rTREHO4QFRoAXd01WyHOmMcJ7oUOjE9tDhNO | |||
| # PXwpSJxy0fNsysHscKNXkld9lI2gG0gDWvfPo2cKdKU27S0vF8jmcjcS9G+xPGeC | |||
| # +VKyjTMWZR4Oit0Q3mT0b85G1NMX6XnEBLTT+yzfH4qerAr7EydAreT54al/RrsH | |||
| # YEdlYEBOsELsTu2zdnnYCjQJbRyAMR/iDlTd5aH75UcQrWSY/1AWLny/BSF64pVB | |||
| # J2nDk4+VyY3YmyGuDVyc8KKuhmiDDGotu3ZrAB2WrfIWe/YWgyS5iM9qqEcxL5rc | |||
| # 43E91wB+YkfRzojJuBj6DnKNwaM9rwJAav9pm5biEKgQtDdQCNbDPTCCBgcwggPv | |||
| # oAMCAQICCmEWaDQAAAAAABwwDQYJKoZIhvcNAQEFBQAwXzETMBEGCgmSJomT8ixk | |||
| # ARkWA2NvbTEZMBcGCgmSJomT8ixkARkWCW1pY3Jvc29mdDEtMCsGA1UEAxMkTWlj | |||
| # cm9zb2Z0IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MB4XDTA3MDQwMzEyNTMw | |||
| # OVoXDTIxMDQwMzEzMDMwOVowdzELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hp | |||
| # bmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jw | |||
| # b3JhdGlvbjEhMB8GA1UEAxMYTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBMIIBIjAN | |||
| # BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAn6Fssd/bSJIqfGsuGeG94uPFmVEj | |||
| # UK3O3RhOJA/u0afRTK10MCAR6wfVVJUVSZQbQpKumFwwJtoAa+h7veyJBw/3DgSY | |||
| # 8InMH8szJIed8vRnHCz8e+eIHernTqOhwSNTyo36Rc8J0F6v0LBCBKL5pmyTZ9co | |||
| # 3EZTsIbQ5ShGLieshk9VUgzkAyz7apCQMG6H81kwnfp+1pez6CGXfvjSE/MIt1Nt | |||
| # UrRFkJ9IAEpHZhEnKWaol+TTBoFKovmEpxFHFAmCn4TtVXj+AZodUAiFABAwRu23 | |||
| # 3iNGu8QtVJ+vHnhBMXfMm987g5OhYQK1HQ2x/PebsgHOIktU//kFw8IgCwIDAQAB | |||
| # o4IBqzCCAacwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUIzT42VJGcArtQPt2 | |||
| # +7MrsMM1sw8wCwYDVR0PBAQDAgGGMBAGCSsGAQQBgjcVAQQDAgEAMIGYBgNVHSME | |||
| # gZAwgY2AFA6sgmBAVieX5SUT/CrhClOVWeSkoWOkYTBfMRMwEQYKCZImiZPyLGQB | |||
| # GRYDY29tMRkwFwYKCZImiZPyLGQBGRYJbWljcm9zb2Z0MS0wKwYDVQQDEyRNaWNy | |||
| # b3NvZnQgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHmCEHmtFqFKoKWtTHNY9AcT | |||
| # LmUwUAYDVR0fBEkwRzBFoEOgQYY/aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3Br | |||
| # aS9jcmwvcHJvZHVjdHMvbWljcm9zb2Z0cm9vdGNlcnQuY3JsMFQGCCsGAQUFBwEB | |||
| # BEgwRjBEBggrBgEFBQcwAoY4aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraS9j | |||
| # ZXJ0cy9NaWNyb3NvZnRSb290Q2VydC5jcnQwEwYDVR0lBAwwCgYIKwYBBQUHAwgw | |||
| # DQYJKoZIhvcNAQEFBQADggIBABCXisNcA0Q23em0rXfbznlRTQGxLnRxW20ME6vO | |||
| # vnuPuC7UEqKMbWK4VwLLTiATUJndekDiV7uvWJoc4R0Bhqy7ePKL0Ow7Ae7ivo8K | |||
| # BciNSOLwUxXdT6uS5OeNatWAweaU8gYvhQPpkSokInD79vzkeJkuDfcH4nC8GE6d | |||
| # jmsKcpW4oTmcZy3FUQ7qYlw/FpiLID/iBxoy+cwxSnYxPStyC8jqcD3/hQoT38IK | |||
| # YY7w17gX606Lf8U1K16jv+u8fQtCe9RTciHuMMq7eGVcWwEXChQO0toUmPU8uWZY | |||
| # sy0v5/mFhsxRVuidcJRsrDlM1PZ5v6oYemIp76KbKTQGdxpiyT0ebR+C8AvHLLvP | |||
| # Q7Pl+ex9teOkqHQ1uE7FcSMSJnYLPFKMcVpGQxS8s7OwTWfIn0L/gHkhgJ4VMGbo | |||
| # QhJeGsieIiHQQ+kr6bv0SMws1NgygEwmKkgkX1rqVu+m3pmdyjpvvYEndAYR7nYh | |||
| # v5uCwSdUtrFqPYmhdmG0bqETpr+qR/ASb/2KMmyy/t9RyIwjyWa9nR2HEmQCPS2v | |||
| # WY+45CHltbDKY7R4VAXUQS5QrJSwpXirs6CWdRrZkocTdSIvMqgIbqBbjCW/oO+E | |||
| # yiHW6x5PyZruSeD3AWVviQt9yGnI5m7qp5fOMSn/DsVbXNhNG6HY+i+ePy5VFmvJ | |||
| # E6P9MYIEgzCCBH8CAQEwgYcweTELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hp | |||
| # bmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jw | |||
| # b3JhdGlvbjEjMCEGA1UEAxMaTWljcm9zb2Z0IENvZGUgU2lnbmluZyBQQ0ECCmEZ | |||
| # zJMAAQAAAGYwCQYFKw4DAhoFAKCBsDAZBgkqhkiG9w0BCQMxDAYKKwYBBAGCNwIB | |||
| # BDAcBgorBgEEAYI3AgELMQ4wDAYKKwYBBAGCNwIBFTAjBgkqhkiG9w0BCQQxFgQU | |||
| # SDInMyiqV3LEzPhzf6mjYJvp5qAwUAYKKwYBBAGCNwIBDDFCMECgIoAgAEUAbgB0 | |||
| # AGkAdAB5ACAARgByAGEAbQBlAHcAbwByAGuhGoAYaHR0cDovL21zZG4uY29tL2Rh | |||
| # dGEvZWYgMA0GCSqGSIb3DQEBAQUABIIBAMTy2exDNM/cRmGrhj6rawr6XoQp77kh | |||
| # +WOMUmSG5U4qSlP8g3fVFH030Xsxz5d8TunxEzRUyDhYHh3mQ56x4RCVJU/fdl8Q | |||
| # dhXwn4VfV84G3+mIHVRCo8+8hm/o1l1K0sHhLCaPSoZht1bcKH09gK1VxoNhBt78 | |||
| # BFUHLTWw0sRwrEJRW1xZPwOoh2rv1cnYi7GPKFHiYrCV3NSHRkSJZmA42UYA1iZv | |||
| # 3fF9QCQNlTDY4jiC2vsa/eWt0qhups1gQXdqg8y/Zvc5cEYxF+ByataJ6fI4w5HP | |||
| # 5WNzsVl1O+6VFlj1qjMzOyVlsHWCOIfFfc8iLoWWy+A4W00yEeHIMT2hggIdMIIC | |||
| # GQYJKoZIhvcNAQkGMYICCjCCAgYCAQEwgYUwdzELMAkGA1UEBhMCVVMxEzARBgNV | |||
| # BAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jv | |||
| # c29mdCBDb3Jwb3JhdGlvbjEhMB8GA1UEAxMYTWljcm9zb2Z0IFRpbWUtU3RhbXAg | |||
| # UENBAgphBRmWAAAAAAAbMAcGBSsOAwIaoF0wGAYJKoZIhvcNAQkDMQsGCSqGSIb3 | |||
| # DQEHATAcBgkqhkiG9w0BCQUxDxcNMTIwNjI4MjA0MzM5WjAjBgkqhkiG9w0BCQQx | |||
| # FgQU2luimdNA+66F/z6ooEia0K5OZC8wDQYJKoZIhvcNAQEFBQAEggEAPUTPALhi | |||
| # x8qJIn6WmeZTiazQRH4/TVQHCJPDxhlaMgDUDsPwwmjrAfL/UnMz+TVi5ltSM0Hb | |||
| # jGLfhTbaw/YcLUqztgxNq/vm0cFqU3n+rIGUBXFUwDoS6Ol6UTSoXkJVHyiOxHuU | |||
| # Fdh33QDv9EVBbr1CQJLTs02d31Uwjg8vUt9+LDSYQWFlZH0+xsy1wStReGX4DSRz | |||
| # QneatHmqk+Vej4/3iFKBlCJO1SPlXQLaFAUFsZr6yl6oTrpfatG6sA16/e8jjW4u | |||
| # Kz0GzJYJ4DMVdSVGpsvVWMADsbEsjlr6yesOrN4ZDEBdv7Y3P518wK/iJ1/WdgRc | |||
| # SA474q5bExc5pA== | |||
| # SIG # End signature block | |||
| @ -0,0 +1,18 @@ | |||
| <?xml version="1.0" encoding="utf-8" ?> | |||
| <configuration> | |||
| <runtime> | |||
| <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> | |||
| <dependentAssembly> | |||
| <assemblyIdentity name="EntityFramework" | |||
| culture="neutral" | |||
| publicKeyToken="b77a5c561934e089" /> | |||
| <bindingRedirect oldVersion="5.0.0.0" | |||
| newVersion="4.4.0.0" /> | |||
| </dependentAssembly> | |||
| <dependentAssembly> | |||
| <assemblyIdentity name="Microsoft.VisualStudio.Shell" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/> | |||
| <bindingRedirect oldVersion="2.0.0.0-10.0.0.0" newVersion="11.0.0.0"/> | |||
| </dependentAssembly> | |||
| </assemblyBinding> | |||
| </runtime> | |||
| </configuration> | |||
| @ -0,0 +1,14 @@ | |||
| <?xml version="1.0" encoding="utf-8" ?> | |||
| <configuration> | |||
| <runtime> | |||
| <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> | |||
| <dependentAssembly> | |||
| <assemblyIdentity name="EntityFramework" | |||
| culture="neutral" | |||
| publicKeyToken="b77a5c561934e089" /> | |||
| <bindingRedirect oldVersion="5.0.0.0" | |||
| newVersion="4.4.0.0" /> | |||
| </dependentAssembly> | |||
| </assemblyBinding> | |||
| </runtime> | |||
| </configuration> | |||
| @ -0,0 +1,30 @@ | |||
| TOPIC | |||
| about_EntityFramework | |||
| SHORT DESCRIPTION | |||
| Provides information about Entity Framework commands. | |||
| LONG DESCRIPTION | |||
| This topic describes the Entity Framework commands. Entity Framework is | |||
| Microsoft's recommended data access technology for new applications. | |||
| The following Entity Framework cmdlets are included. | |||
| Cmdlet Description | |||
| ----------------- --------------------------------------------------- | |||
| Enable-Migrations Enables Code First Migrations in a project. | |||
| Add-Migration Scaffolds a migration script for any pending model | |||
| changes. | |||
| Update-Database Applies any pending migrations to the database. | |||
| Get-Migrations Displays the migrations that have been applied to | |||
| the target database. | |||
| SEE ALSO | |||
| Enable-Migrations | |||
| Add-Migration | |||
| Update-Database | |||
| Get-Migrations | |||
| @ -0,0 +1,176 @@ | |||
| param($installPath, $toolsPath, $package, $project) | |||
| $importedModule = Get-Module | ?{ $_.Name -eq 'EntityFramework' } | |||
| if ($PSVersionTable.PSVersion -ge (New-Object Version @( 3, 0 ))) | |||
| { | |||
| $thisModuleManifest = 'EntityFramework.PS3.psd1' | |||
| } | |||
| else | |||
| { | |||
| $thisModuleManifest = 'EntityFramework.psd1' | |||
| } | |||
| $thisModule = Test-ModuleManifest (Join-Path $toolsPath $thisModuleManifest) | |||
| $shouldImport = $true | |||
| if ($importedModule) | |||
| { | |||
| if ($importedModule.Version -le $thisModule.Version) | |||
| { | |||
| Remove-Module EntityFramework | |||
| } | |||
| else | |||
| { | |||
| $shouldImport = $false | |||
| } | |||
| } | |||
| if ($shouldImport) | |||
| { | |||
| Import-Module $thisModule | |||
| } | |||
| # SIG # Begin signature block | |||
| # MIIaSAYJKoZIhvcNAQcCoIIaOTCCGjUCAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB | |||
| # gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR | |||
| # AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQU4JbMotbKQrAO4s/cceCMbJQG | |||
| # 482gghUtMIIEoDCCA4igAwIBAgIKYRnMkwABAAAAZjANBgkqhkiG9w0BAQUFADB5 | |||
| # MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVk | |||
| # bW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSMwIQYDVQQDExpN | |||
| # aWNyb3NvZnQgQ29kZSBTaWduaW5nIFBDQTAeFw0xMTEwMTAyMDMyMjVaFw0xMzAx | |||
| # MTAyMDMyMjVaMIGDMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQ | |||
| # MA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9u | |||
| # MQ0wCwYDVQQLEwRNT1BSMR4wHAYDVQQDExVNaWNyb3NvZnQgQ29ycG9yYXRpb24w | |||
| # ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDuW759ESTjhgbgZv9ItRe9 | |||
| # AuS0DDLwcj59LofXTqGxp0Mv92WeMeEyMUWu18EkhCHXLrWEfvo101Mc17ZRHk/O | |||
| # ZrnrtwwC/SlcraiH9soitNW/CHX1inCPY9fvih7pj0MkZFrTh32QbTusds1XNn3o | |||
| # vBBWrJjwiV0uZMavJgleHmMV8T2/Fo+ZiALDMLfBC2AfD3LM1reoNRKGm6ELCuaT | |||
| # W476VJzB8xlfQo0Snx0/kLcnE4MZMoId89mH1CGyPKK2B0/XJKrujfWz2fr5OU+n | |||
| # 6fKvWVL03EGbLxFwY93q3qrxbSEEEFMzu7JPxeFTskFlR2439rzpmxZBkWsuWzDD | |||
| # AgMBAAGjggEdMIIBGTATBgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQUG1IO | |||
| # 8xEqt8CJwxGBPdSWWLmjU24wDgYDVR0PAQH/BAQDAgeAMB8GA1UdIwQYMBaAFMsR | |||
| # 6MrStBZYAck3LjMWFrlMmgofMFYGA1UdHwRPME0wS6BJoEeGRWh0dHA6Ly9jcmwu | |||
| # bWljcm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01pY0NvZFNpZ1BDQV8wOC0z | |||
| # MS0yMDEwLmNybDBaBggrBgEFBQcBAQROMEwwSgYIKwYBBQUHMAKGPmh0dHA6Ly93 | |||
| # d3cubWljcm9zb2Z0LmNvbS9wa2kvY2VydHMvTWljQ29kU2lnUENBXzA4LTMxLTIw | |||
| # MTAuY3J0MA0GCSqGSIb3DQEBBQUAA4IBAQClWzZsrU6baRLjb4oCm2l3w2xkciiI | |||
| # 2T1FbSwYe9QoLxPiWWobwgs0t4r96rmU7Acx5mr0dQTTp9peOgaeEP2pDb2cUUNv | |||
| # /2eUnOHPfPAksDXMg13u2sBvNknAWgpX9nPhnvPjCEw7Pi/M0s3uTyJw9wQfAqZL | |||
| # m7iPXIgONpRsMwe4qa1RoNDC3I4iEr3D34LXVqH33fClIFcQEJ3urIZ0bHGbwfDy | |||
| # wnBep9ttTTdYmU15QNA0XVolrmfrG05GBrCMKR+jEI+lM58j1fi1Rn3g7mOYkEs+ | |||
| # BagvsBizWaSvQVOOCAUQLSrJOgZMHC6pMVFWZKyazKyXmCmKl5CH6p22MIIEujCC | |||
| # A6KgAwIBAgIKYQKSSgAAAAAAIDANBgkqhkiG9w0BAQUFADB3MQswCQYDVQQGEwJV | |||
| # UzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UE | |||
| # ChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSEwHwYDVQQDExhNaWNyb3NvZnQgVGlt | |||
| # ZS1TdGFtcCBQQ0EwHhcNMTIwMTA5MjIyNTU5WhcNMTMwNDA5MjIyNTU5WjCBszEL | |||
| # MAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1v | |||
| # bmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjENMAsGA1UECxMETU9Q | |||
| # UjEnMCUGA1UECxMebkNpcGhlciBEU0UgRVNOOkI4RUMtMzBBNC03MTQ0MSUwIwYD | |||
| # VQQDExxNaWNyb3NvZnQgVGltZS1TdGFtcCBTZXJ2aWNlMIIBIjANBgkqhkiG9w0B | |||
| # AQEFAAOCAQ8AMIIBCgKCAQEAzWPD96K1R9n5OZRTrGuPpnk4IfTRbj0VOBbBcyyZ | |||
| # j/vgPFvhokyLsquLtPJKx7mTUNEm9YdTsHp180cPFytnLGTrYOdKjOCLXsRWaTc6 | |||
| # KgRdFwHIv6m308mro5GogeM/LbfY5MR4AHk5z/3HZOIjEnieDHYnSY+arA504wZV | |||
| # VUnI7aF8cEVhfrJxFh7hwUG50tIy6VIk8zZQBNfdbzxJ1QvUdkD8ZWUTfpVROtX/ | |||
| # uJqnV2tLFeU3WB/cAA3FrurfgUf58FKu5s9arOAUSqZxlID6/bAjMGDpg2CsDiQe | |||
| # /xHy56VVYpXun3+eKdbNSwp2g/BDBN8GSSDyU1pEsFF6OQIDAQABo4IBCTCCAQUw | |||
| # HQYDVR0OBBYEFM0ZrGFNlGcr9q+UdVnb8FgAg6E6MB8GA1UdIwQYMBaAFCM0+NlS | |||
| # RnAK7UD7dvuzK7DDNbMPMFQGA1UdHwRNMEswSaBHoEWGQ2h0dHA6Ly9jcmwubWlj | |||
| # cm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01pY3Jvc29mdFRpbWVTdGFtcFBD | |||
| # QS5jcmwwWAYIKwYBBQUHAQEETDBKMEgGCCsGAQUFBzAChjxodHRwOi8vd3d3Lm1p | |||
| # Y3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY3Jvc29mdFRpbWVTdGFtcFBDQS5jcnQw | |||
| # EwYDVR0lBAwwCgYIKwYBBQUHAwgwDQYJKoZIhvcNAQEFBQADggEBAFEc1t82HdyA | |||
| # vAKnxpnfFsiQBmkVmjK582QQ0orzYikbeY/KYKmzXcTkFi01jESb8fRcYaRBrpqL | |||
| # ulDRanlqs2KMnU1RUAupjtS/ohDAR9VOdVKJHj+Wao8uQBQGcu4/cFmSXYXtg5n6 | |||
| # goSe5AMBIROrJ9bMcUnl2h3/bzwJTtWNZugMyX/uMRQCN197aeyJPkV/JUTnHxrW | |||
| # xRrDSuTh8YSY50/5qZinGEbshGzsqQMK/Xx6Uh2ca6SoD5iSpJJ4XCt4432yx9m2 | |||
| # cH3fW3NTv6rUZlBL8Mk7lYXlwUplnSVYULsgVJF5OhsHXGpXKK8xx5/nwx3uR/0n | |||
| # 13/PdNxlxT8wggW8MIIDpKADAgECAgphMyYaAAAAAAAxMA0GCSqGSIb3DQEBBQUA | |||
| # MF8xEzARBgoJkiaJk/IsZAEZFgNjb20xGTAXBgoJkiaJk/IsZAEZFgltaWNyb3Nv | |||
| # ZnQxLTArBgNVBAMTJE1pY3Jvc29mdCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0 | |||
| # eTAeFw0xMDA4MzEyMjE5MzJaFw0yMDA4MzEyMjI5MzJaMHkxCzAJBgNVBAYTAlVT | |||
| # MRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQK | |||
| # ExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xIzAhBgNVBAMTGk1pY3Jvc29mdCBDb2Rl | |||
| # IFNpZ25pbmcgUENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsnJZ | |||
| # XBkwZL8dmmAgIEKZdlNsPhvWb8zL8epr/pcWEODfOnSDGrcvoDLs/97CQk4j1XIA | |||
| # 2zVXConKriBJ9PBorE1LjaW9eUtxm0cH2v0l3511iM+qc0R/14Hb873yNqTJXEXc | |||
| # r6094CholxqnpXJzVvEXlOT9NZRyoNZ2Xx53RYOFOBbQc1sFumdSjaWyaS/aGQv+ | |||
| # knQp4nYvVN0UMFn40o1i/cvJX0YxULknE+RAMM9yKRAoIsc3Tj2gMj2QzaE4BoVc | |||
| # TlaCKCoFMrdL109j59ItYvFFPeesCAD2RqGe0VuMJlPoeqpK8kbPNzw4nrR3XKUX | |||
| # no3LEY9WPMGsCV8D0wIDAQABo4IBXjCCAVowDwYDVR0TAQH/BAUwAwEB/zAdBgNV | |||
| # HQ4EFgQUyxHoytK0FlgByTcuMxYWuUyaCh8wCwYDVR0PBAQDAgGGMBIGCSsGAQQB | |||
| # gjcVAQQFAgMBAAEwIwYJKwYBBAGCNxUCBBYEFP3RMU7TJoqV4ZhgO6gxb6Y8vNgt | |||
| # MBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMB8GA1UdIwQYMBaAFA6sgmBAVieX | |||
| # 5SUT/CrhClOVWeSkMFAGA1UdHwRJMEcwRaBDoEGGP2h0dHA6Ly9jcmwubWljcm9z | |||
| # b2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL21pY3Jvc29mdHJvb3RjZXJ0LmNybDBU | |||
| # BggrBgEFBQcBAQRIMEYwRAYIKwYBBQUHMAKGOGh0dHA6Ly93d3cubWljcm9zb2Z0 | |||
| # LmNvbS9wa2kvY2VydHMvTWljcm9zb2Z0Um9vdENlcnQuY3J0MA0GCSqGSIb3DQEB | |||
| # BQUAA4ICAQBZOT5/Jkav629AsTK1ausOL26oSffrX3XtTDst10OtC/7L6S0xoyPM | |||
| # fFCYgCFdrD0vTLqiqFac43C7uLT4ebVJcvc+6kF/yuEMF2nLpZwgLfoLUMRWzS3j | |||
| # StK8cOeoDaIDpVbguIpLV/KVQpzx8+/u44YfNDy4VprwUyOFKqSCHJPilAcd8uJO | |||
| # +IyhyugTpZFOyBvSj3KVKnFtmxr4HPBT1mfMIv9cHc2ijL0nsnljVkSiUc356aNY | |||
| # Vt2bAkVEL1/02q7UgjJu/KSVE+Traeepoiy+yCsQDmWOmdv1ovoSJgllOJTxeh9K | |||
| # u9HhVujQeJYYXMk1Fl/dkx1Jji2+rTREHO4QFRoAXd01WyHOmMcJ7oUOjE9tDhNO | |||
| # PXwpSJxy0fNsysHscKNXkld9lI2gG0gDWvfPo2cKdKU27S0vF8jmcjcS9G+xPGeC | |||
| # +VKyjTMWZR4Oit0Q3mT0b85G1NMX6XnEBLTT+yzfH4qerAr7EydAreT54al/RrsH | |||
| # YEdlYEBOsELsTu2zdnnYCjQJbRyAMR/iDlTd5aH75UcQrWSY/1AWLny/BSF64pVB | |||
| # J2nDk4+VyY3YmyGuDVyc8KKuhmiDDGotu3ZrAB2WrfIWe/YWgyS5iM9qqEcxL5rc | |||
| # 43E91wB+YkfRzojJuBj6DnKNwaM9rwJAav9pm5biEKgQtDdQCNbDPTCCBgcwggPv | |||
| # oAMCAQICCmEWaDQAAAAAABwwDQYJKoZIhvcNAQEFBQAwXzETMBEGCgmSJomT8ixk | |||
| # ARkWA2NvbTEZMBcGCgmSJomT8ixkARkWCW1pY3Jvc29mdDEtMCsGA1UEAxMkTWlj | |||
| # cm9zb2Z0IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MB4XDTA3MDQwMzEyNTMw | |||
| # OVoXDTIxMDQwMzEzMDMwOVowdzELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hp | |||
| # bmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jw | |||
| # b3JhdGlvbjEhMB8GA1UEAxMYTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBMIIBIjAN | |||
| # BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAn6Fssd/bSJIqfGsuGeG94uPFmVEj | |||
| # UK3O3RhOJA/u0afRTK10MCAR6wfVVJUVSZQbQpKumFwwJtoAa+h7veyJBw/3DgSY | |||
| # 8InMH8szJIed8vRnHCz8e+eIHernTqOhwSNTyo36Rc8J0F6v0LBCBKL5pmyTZ9co | |||
| # 3EZTsIbQ5ShGLieshk9VUgzkAyz7apCQMG6H81kwnfp+1pez6CGXfvjSE/MIt1Nt | |||
| # UrRFkJ9IAEpHZhEnKWaol+TTBoFKovmEpxFHFAmCn4TtVXj+AZodUAiFABAwRu23 | |||
| # 3iNGu8QtVJ+vHnhBMXfMm987g5OhYQK1HQ2x/PebsgHOIktU//kFw8IgCwIDAQAB | |||
| # o4IBqzCCAacwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUIzT42VJGcArtQPt2 | |||
| # +7MrsMM1sw8wCwYDVR0PBAQDAgGGMBAGCSsGAQQBgjcVAQQDAgEAMIGYBgNVHSME | |||
| # gZAwgY2AFA6sgmBAVieX5SUT/CrhClOVWeSkoWOkYTBfMRMwEQYKCZImiZPyLGQB | |||
| # GRYDY29tMRkwFwYKCZImiZPyLGQBGRYJbWljcm9zb2Z0MS0wKwYDVQQDEyRNaWNy | |||
| # b3NvZnQgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHmCEHmtFqFKoKWtTHNY9AcT | |||
| # LmUwUAYDVR0fBEkwRzBFoEOgQYY/aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3Br | |||
| # aS9jcmwvcHJvZHVjdHMvbWljcm9zb2Z0cm9vdGNlcnQuY3JsMFQGCCsGAQUFBwEB | |||
| # BEgwRjBEBggrBgEFBQcwAoY4aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraS9j | |||
| # ZXJ0cy9NaWNyb3NvZnRSb290Q2VydC5jcnQwEwYDVR0lBAwwCgYIKwYBBQUHAwgw | |||
| # DQYJKoZIhvcNAQEFBQADggIBABCXisNcA0Q23em0rXfbznlRTQGxLnRxW20ME6vO | |||
| # vnuPuC7UEqKMbWK4VwLLTiATUJndekDiV7uvWJoc4R0Bhqy7ePKL0Ow7Ae7ivo8K | |||
| # BciNSOLwUxXdT6uS5OeNatWAweaU8gYvhQPpkSokInD79vzkeJkuDfcH4nC8GE6d | |||
| # jmsKcpW4oTmcZy3FUQ7qYlw/FpiLID/iBxoy+cwxSnYxPStyC8jqcD3/hQoT38IK | |||
| # YY7w17gX606Lf8U1K16jv+u8fQtCe9RTciHuMMq7eGVcWwEXChQO0toUmPU8uWZY | |||
| # sy0v5/mFhsxRVuidcJRsrDlM1PZ5v6oYemIp76KbKTQGdxpiyT0ebR+C8AvHLLvP | |||
| # Q7Pl+ex9teOkqHQ1uE7FcSMSJnYLPFKMcVpGQxS8s7OwTWfIn0L/gHkhgJ4VMGbo | |||
| # QhJeGsieIiHQQ+kr6bv0SMws1NgygEwmKkgkX1rqVu+m3pmdyjpvvYEndAYR7nYh | |||
| # v5uCwSdUtrFqPYmhdmG0bqETpr+qR/ASb/2KMmyy/t9RyIwjyWa9nR2HEmQCPS2v | |||
| # WY+45CHltbDKY7R4VAXUQS5QrJSwpXirs6CWdRrZkocTdSIvMqgIbqBbjCW/oO+E | |||
| # yiHW6x5PyZruSeD3AWVviQt9yGnI5m7qp5fOMSn/DsVbXNhNG6HY+i+ePy5VFmvJ | |||
| # E6P9MYIEhTCCBIECAQEwgYcweTELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hp | |||
| # bmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jw | |||
| # b3JhdGlvbjEjMCEGA1UEAxMaTWljcm9zb2Z0IENvZGUgU2lnbmluZyBQQ0ECCmEZ | |||
| # zJMAAQAAAGYwCQYFKw4DAhoFAKCBsDAZBgkqhkiG9w0BCQMxDAYKKwYBBAGCNwIB | |||
| # BDAcBgorBgEEAYI3AgELMQ4wDAYKKwYBBAGCNwIBFTAjBgkqhkiG9w0BCQQxFgQU | |||
| # WQ2AdtM5zwQcEcFbsSevYrmN6UQwUAYKKwYBBAGCNwIBDDFCMECgIoAgAEUAbgB0 | |||
| # AGkAdAB5ACAARgByAGEAbQBlAHcAbwByAGuhGoAYaHR0cDovL21zZG4uY29tL2Rh | |||
| # dGEvZWYgMA0GCSqGSIb3DQEBAQUABIIBAAp6IKF/Uj/9lpK3SAcA7JJxjVoqi+yI | |||
| # n0i9qNP5b4+zTSrtpnPDibOaQvhdUlEsAlEjnJTRCwYR9zobPyxJfGoh9j/qkgcU | |||
| # wWBIdmNhzMEzVDJwlE9puRipHQNP6ftcbaz9SOD40aOQ8skR9ecYuHW9SGG0levm | |||
| # m2Q/UWxmxVvtv6HnYzWUn6vHrJmiRk+t1ckG9Dxq2GPnBA+hGrRdYaijPBSwSWcg | |||
| # FnBsl4s88UVL7N8hpKYOQGnqGda6V1LJIgNPKoGNoPllFeJWXKgClvJ6majpd6dz | |||
| # o8S6A9a19D2Dh1l0cbwpI2ZFZjfY9UOVSH33i6fk7CM0aCVe9z3dcB+hggIfMIIC | |||
| # GwYJKoZIhvcNAQkGMYICDDCCAggCAQEwgYUwdzELMAkGA1UEBhMCVVMxEzARBgNV | |||
| # BAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jv | |||
| # c29mdCBDb3Jwb3JhdGlvbjEhMB8GA1UEAxMYTWljcm9zb2Z0IFRpbWUtU3RhbXAg | |||
| # UENBAgphApJKAAAAAAAgMAkGBSsOAwIaBQCgXTAYBgkqhkiG9w0BCQMxCwYJKoZI | |||
| # hvcNAQcBMBwGCSqGSIb3DQEJBTEPFw0xMjA2MjgyMDQzMzlaMCMGCSqGSIb3DQEJ | |||
| # BDEWBBTcH0Qic4YQ6MzFbjR1RWKCxjK8pzANBgkqhkiG9w0BAQUFAASCAQAdMhoS | |||
| # z2zXLJyB1RIjdnGlDxLKzXF+rxImjMI7VfId2vIg4FaGIPqnN0BBTp8o+HZCv3cM | |||
| # ZV/okS8w9k/82jWjJ183l9fn3moQe4qbVlV6yUJvPFpW47LFrEAXgdmL8bgA/VOW | |||
| # HtJRP52lPDsb7J1WjqNOh7KkyD5x0Y8Pwrb+Xc63ibtTjOeAttPxKk+1gZh95wUA | |||
| # ykjw7RKZLHfyJ9Ph5lCkzDQrXXwGGPuzaZVO+pkowgy2yCPRecShGBCKbCyOZlhT | |||
| # BS1WVJDHS95N732o0lPzWE5rTQe/awv8xkgCe9e8ci4S7/lSnj3aVOLbM3S8jG4x | |||
| # Oi4rxrjYTjts1n2P | |||
| # SIG # End signature block | |||
| @ -0,0 +1,170 @@ | |||
| param($installPath, $toolsPath, $package, $project) | |||
| function Invoke-ConnectionFactoryConfigurator($assemblyPath, $project) | |||
| { | |||
| $appDomain = [AppDomain]::CreateDomain( | |||
| 'EntityFramework.PowerShell', | |||
| $null, | |||
| (New-Object System.AppDomainSetup -Property @{ ShadowCopyFiles = 'true' })) | |||
| $appDomain.CreateInstanceFrom( | |||
| $assemblyPath, | |||
| 'System.Data.Entity.ConnectionFactoryConfig.ConnectionFactoryConfigurator', | |||
| $false, | |||
| 0, | |||
| $null, | |||
| $project, | |||
| $null, | |||
| $null) | Out-Null | |||
| [AppDomain]::Unload($appDomain) | |||
| } | |||
| Invoke-ConnectionFactoryConfigurator (Join-Path $toolsPath EntityFramework.PowerShell.dll) $project | |||
| Write-Host | |||
| Write-Host "Type 'get-help EntityFramework' to see all available Entity Framework commands." | |||
| # SIG # Begin signature block | |||
| # MIIaRgYJKoZIhvcNAQcCoIIaNzCCGjMCAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB | |||
| # gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR | |||
| # AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQU4nG54zEClXzFX9aYwYpo8BH3 | |||
| # YWygghUtMIIEoDCCA4igAwIBAgIKYRnMkwABAAAAZjANBgkqhkiG9w0BAQUFADB5 | |||
| # MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVk | |||
| # bW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSMwIQYDVQQDExpN | |||
| # aWNyb3NvZnQgQ29kZSBTaWduaW5nIFBDQTAeFw0xMTEwMTAyMDMyMjVaFw0xMzAx | |||
| # MTAyMDMyMjVaMIGDMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQ | |||
| # MA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9u | |||
| # MQ0wCwYDVQQLEwRNT1BSMR4wHAYDVQQDExVNaWNyb3NvZnQgQ29ycG9yYXRpb24w | |||
| # ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDuW759ESTjhgbgZv9ItRe9 | |||
| # AuS0DDLwcj59LofXTqGxp0Mv92WeMeEyMUWu18EkhCHXLrWEfvo101Mc17ZRHk/O | |||
| # ZrnrtwwC/SlcraiH9soitNW/CHX1inCPY9fvih7pj0MkZFrTh32QbTusds1XNn3o | |||
| # vBBWrJjwiV0uZMavJgleHmMV8T2/Fo+ZiALDMLfBC2AfD3LM1reoNRKGm6ELCuaT | |||
| # W476VJzB8xlfQo0Snx0/kLcnE4MZMoId89mH1CGyPKK2B0/XJKrujfWz2fr5OU+n | |||
| # 6fKvWVL03EGbLxFwY93q3qrxbSEEEFMzu7JPxeFTskFlR2439rzpmxZBkWsuWzDD | |||
| # AgMBAAGjggEdMIIBGTATBgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQUG1IO | |||
| # 8xEqt8CJwxGBPdSWWLmjU24wDgYDVR0PAQH/BAQDAgeAMB8GA1UdIwQYMBaAFMsR | |||
| # 6MrStBZYAck3LjMWFrlMmgofMFYGA1UdHwRPME0wS6BJoEeGRWh0dHA6Ly9jcmwu | |||
| # bWljcm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01pY0NvZFNpZ1BDQV8wOC0z | |||
| # MS0yMDEwLmNybDBaBggrBgEFBQcBAQROMEwwSgYIKwYBBQUHMAKGPmh0dHA6Ly93 | |||
| # d3cubWljcm9zb2Z0LmNvbS9wa2kvY2VydHMvTWljQ29kU2lnUENBXzA4LTMxLTIw | |||
| # MTAuY3J0MA0GCSqGSIb3DQEBBQUAA4IBAQClWzZsrU6baRLjb4oCm2l3w2xkciiI | |||
| # 2T1FbSwYe9QoLxPiWWobwgs0t4r96rmU7Acx5mr0dQTTp9peOgaeEP2pDb2cUUNv | |||
| # /2eUnOHPfPAksDXMg13u2sBvNknAWgpX9nPhnvPjCEw7Pi/M0s3uTyJw9wQfAqZL | |||
| # m7iPXIgONpRsMwe4qa1RoNDC3I4iEr3D34LXVqH33fClIFcQEJ3urIZ0bHGbwfDy | |||
| # wnBep9ttTTdYmU15QNA0XVolrmfrG05GBrCMKR+jEI+lM58j1fi1Rn3g7mOYkEs+ | |||
| # BagvsBizWaSvQVOOCAUQLSrJOgZMHC6pMVFWZKyazKyXmCmKl5CH6p22MIIEujCC | |||
| # A6KgAwIBAgIKYQUZlgAAAAAAGzANBgkqhkiG9w0BAQUFADB3MQswCQYDVQQGEwJV | |||
| # UzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UE | |||
| # ChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSEwHwYDVQQDExhNaWNyb3NvZnQgVGlt | |||
| # ZS1TdGFtcCBQQ0EwHhcNMTEwNzI1MjA0MjE5WhcNMTIxMDI1MjA0MjE5WjCBszEL | |||
| # MAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1v | |||
| # bmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjENMAsGA1UECxMETU9Q | |||
| # UjEnMCUGA1UECxMebkNpcGhlciBEU0UgRVNOOjlFNzgtODY0Qi0wMzlEMSUwIwYD | |||
| # VQQDExxNaWNyb3NvZnQgVGltZS1TdGFtcCBTZXJ2aWNlMIIBIjANBgkqhkiG9w0B | |||
| # AQEFAAOCAQ8AMIIBCgKCAQEA08s7U6KfRKN6q01WcVOKd6o3k34BPv2rAqNTqf/R | |||
| # sSLFAJDndW7uGOiBDhPF2GEAvh+gdjsEDQTFBKCo/ENTBqEEBLkLkpgCYjjv1DMS | |||
| # 9ys9e++tRVeFlSCf12M0nGJGjr6u4NmeOfapVf3P53fmNRPvXOi/SJNPGkMHWDiK | |||
| # f4UUbOrJ0Et6gm7L0xVgCBSJlKhbPzrJPyB9bS9YGn3Kiji8w8I5aNgtWBoj7SoQ | |||
| # CFogjIKl7dGXRZKFzMM3g98NmHzF07bgmVPYeAj15SMhB2KGWmppGf1w+VM0gfcl | |||
| # MRmGh4vAVZr9qkw1Ff1b6ZXJq1OYKV8speElD2TF8rAndQIDAQABo4IBCTCCAQUw | |||
| # HQYDVR0OBBYEFHkj56ENvlUsaBgpYoJn1vPhNjhaMB8GA1UdIwQYMBaAFCM0+NlS | |||
| # RnAK7UD7dvuzK7DDNbMPMFQGA1UdHwRNMEswSaBHoEWGQ2h0dHA6Ly9jcmwubWlj | |||
| # cm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01pY3Jvc29mdFRpbWVTdGFtcFBD | |||
| # QS5jcmwwWAYIKwYBBQUHAQEETDBKMEgGCCsGAQUFBzAChjxodHRwOi8vd3d3Lm1p | |||
| # Y3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY3Jvc29mdFRpbWVTdGFtcFBDQS5jcnQw | |||
| # EwYDVR0lBAwwCgYIKwYBBQUHAwgwDQYJKoZIhvcNAQEFBQADggEBAEfCdoFbMd1v | |||
| # 0zyZ8npsfpcTUCwFFxsQuEShtYz0Vs+9sCG0ZG1hHNju6Ov1ku5DohhEw/r67622 | |||
| # XH+XbUu1Q/snYXgIVHyx+a+YCrR0xKroLVDEff59TqGZ1icot67Y37GPgyKOzvN5 | |||
| # /GEUbb/rzISw36O7WwW36lT1Yh1sJ6ZjS/rjofq734WWZWlTsLZxmGQmZr3F8Vxi | |||
| # vJH0PZxLQgANzzgFFCZa3CoFS39qmTjY3XOZos6MUCSepOv1P4p4zFSZXSVmpEEG | |||
| # KK9JxLRSlOzeAoNk/k3U/0ui/CmA2+4/qzztM4jKvyJg0Fw7BLAKtJhtPKc6T5rR | |||
| # ARYRYopBdqAwggW8MIIDpKADAgECAgphMyYaAAAAAAAxMA0GCSqGSIb3DQEBBQUA | |||
| # MF8xEzARBgoJkiaJk/IsZAEZFgNjb20xGTAXBgoJkiaJk/IsZAEZFgltaWNyb3Nv | |||
| # ZnQxLTArBgNVBAMTJE1pY3Jvc29mdCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0 | |||
| # eTAeFw0xMDA4MzEyMjE5MzJaFw0yMDA4MzEyMjI5MzJaMHkxCzAJBgNVBAYTAlVT | |||
| # MRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQK | |||
| # ExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xIzAhBgNVBAMTGk1pY3Jvc29mdCBDb2Rl | |||
| # IFNpZ25pbmcgUENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsnJZ | |||
| # XBkwZL8dmmAgIEKZdlNsPhvWb8zL8epr/pcWEODfOnSDGrcvoDLs/97CQk4j1XIA | |||
| # 2zVXConKriBJ9PBorE1LjaW9eUtxm0cH2v0l3511iM+qc0R/14Hb873yNqTJXEXc | |||
| # r6094CholxqnpXJzVvEXlOT9NZRyoNZ2Xx53RYOFOBbQc1sFumdSjaWyaS/aGQv+ | |||
| # knQp4nYvVN0UMFn40o1i/cvJX0YxULknE+RAMM9yKRAoIsc3Tj2gMj2QzaE4BoVc | |||
| # TlaCKCoFMrdL109j59ItYvFFPeesCAD2RqGe0VuMJlPoeqpK8kbPNzw4nrR3XKUX | |||
| # no3LEY9WPMGsCV8D0wIDAQABo4IBXjCCAVowDwYDVR0TAQH/BAUwAwEB/zAdBgNV | |||
| # HQ4EFgQUyxHoytK0FlgByTcuMxYWuUyaCh8wCwYDVR0PBAQDAgGGMBIGCSsGAQQB | |||
| # gjcVAQQFAgMBAAEwIwYJKwYBBAGCNxUCBBYEFP3RMU7TJoqV4ZhgO6gxb6Y8vNgt | |||
| # MBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMB8GA1UdIwQYMBaAFA6sgmBAVieX | |||
| # 5SUT/CrhClOVWeSkMFAGA1UdHwRJMEcwRaBDoEGGP2h0dHA6Ly9jcmwubWljcm9z | |||
| # b2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL21pY3Jvc29mdHJvb3RjZXJ0LmNybDBU | |||
| # BggrBgEFBQcBAQRIMEYwRAYIKwYBBQUHMAKGOGh0dHA6Ly93d3cubWljcm9zb2Z0 | |||
| # LmNvbS9wa2kvY2VydHMvTWljcm9zb2Z0Um9vdENlcnQuY3J0MA0GCSqGSIb3DQEB | |||
| # BQUAA4ICAQBZOT5/Jkav629AsTK1ausOL26oSffrX3XtTDst10OtC/7L6S0xoyPM | |||
| # fFCYgCFdrD0vTLqiqFac43C7uLT4ebVJcvc+6kF/yuEMF2nLpZwgLfoLUMRWzS3j | |||
| # StK8cOeoDaIDpVbguIpLV/KVQpzx8+/u44YfNDy4VprwUyOFKqSCHJPilAcd8uJO | |||
| # +IyhyugTpZFOyBvSj3KVKnFtmxr4HPBT1mfMIv9cHc2ijL0nsnljVkSiUc356aNY | |||
| # Vt2bAkVEL1/02q7UgjJu/KSVE+Traeepoiy+yCsQDmWOmdv1ovoSJgllOJTxeh9K | |||
| # u9HhVujQeJYYXMk1Fl/dkx1Jji2+rTREHO4QFRoAXd01WyHOmMcJ7oUOjE9tDhNO | |||
| # PXwpSJxy0fNsysHscKNXkld9lI2gG0gDWvfPo2cKdKU27S0vF8jmcjcS9G+xPGeC | |||
| # +VKyjTMWZR4Oit0Q3mT0b85G1NMX6XnEBLTT+yzfH4qerAr7EydAreT54al/RrsH | |||
| # YEdlYEBOsELsTu2zdnnYCjQJbRyAMR/iDlTd5aH75UcQrWSY/1AWLny/BSF64pVB | |||
| # J2nDk4+VyY3YmyGuDVyc8KKuhmiDDGotu3ZrAB2WrfIWe/YWgyS5iM9qqEcxL5rc | |||
| # 43E91wB+YkfRzojJuBj6DnKNwaM9rwJAav9pm5biEKgQtDdQCNbDPTCCBgcwggPv | |||
| # oAMCAQICCmEWaDQAAAAAABwwDQYJKoZIhvcNAQEFBQAwXzETMBEGCgmSJomT8ixk | |||
| # ARkWA2NvbTEZMBcGCgmSJomT8ixkARkWCW1pY3Jvc29mdDEtMCsGA1UEAxMkTWlj | |||
| # cm9zb2Z0IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MB4XDTA3MDQwMzEyNTMw | |||
| # OVoXDTIxMDQwMzEzMDMwOVowdzELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hp | |||
| # bmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jw | |||
| # b3JhdGlvbjEhMB8GA1UEAxMYTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBMIIBIjAN | |||
| # BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAn6Fssd/bSJIqfGsuGeG94uPFmVEj | |||
| # UK3O3RhOJA/u0afRTK10MCAR6wfVVJUVSZQbQpKumFwwJtoAa+h7veyJBw/3DgSY | |||
| # 8InMH8szJIed8vRnHCz8e+eIHernTqOhwSNTyo36Rc8J0F6v0LBCBKL5pmyTZ9co | |||
| # 3EZTsIbQ5ShGLieshk9VUgzkAyz7apCQMG6H81kwnfp+1pez6CGXfvjSE/MIt1Nt | |||
| # UrRFkJ9IAEpHZhEnKWaol+TTBoFKovmEpxFHFAmCn4TtVXj+AZodUAiFABAwRu23 | |||
| # 3iNGu8QtVJ+vHnhBMXfMm987g5OhYQK1HQ2x/PebsgHOIktU//kFw8IgCwIDAQAB | |||
| # o4IBqzCCAacwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUIzT42VJGcArtQPt2 | |||
| # +7MrsMM1sw8wCwYDVR0PBAQDAgGGMBAGCSsGAQQBgjcVAQQDAgEAMIGYBgNVHSME | |||
| # gZAwgY2AFA6sgmBAVieX5SUT/CrhClOVWeSkoWOkYTBfMRMwEQYKCZImiZPyLGQB | |||
| # GRYDY29tMRkwFwYKCZImiZPyLGQBGRYJbWljcm9zb2Z0MS0wKwYDVQQDEyRNaWNy | |||
| # b3NvZnQgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHmCEHmtFqFKoKWtTHNY9AcT | |||
| # LmUwUAYDVR0fBEkwRzBFoEOgQYY/aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3Br | |||
| # aS9jcmwvcHJvZHVjdHMvbWljcm9zb2Z0cm9vdGNlcnQuY3JsMFQGCCsGAQUFBwEB | |||
| # BEgwRjBEBggrBgEFBQcwAoY4aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraS9j | |||
| # ZXJ0cy9NaWNyb3NvZnRSb290Q2VydC5jcnQwEwYDVR0lBAwwCgYIKwYBBQUHAwgw | |||
| # DQYJKoZIhvcNAQEFBQADggIBABCXisNcA0Q23em0rXfbznlRTQGxLnRxW20ME6vO | |||
| # vnuPuC7UEqKMbWK4VwLLTiATUJndekDiV7uvWJoc4R0Bhqy7ePKL0Ow7Ae7ivo8K | |||
| # BciNSOLwUxXdT6uS5OeNatWAweaU8gYvhQPpkSokInD79vzkeJkuDfcH4nC8GE6d | |||
| # jmsKcpW4oTmcZy3FUQ7qYlw/FpiLID/iBxoy+cwxSnYxPStyC8jqcD3/hQoT38IK | |||
| # YY7w17gX606Lf8U1K16jv+u8fQtCe9RTciHuMMq7eGVcWwEXChQO0toUmPU8uWZY | |||
| # sy0v5/mFhsxRVuidcJRsrDlM1PZ5v6oYemIp76KbKTQGdxpiyT0ebR+C8AvHLLvP | |||
| # Q7Pl+ex9teOkqHQ1uE7FcSMSJnYLPFKMcVpGQxS8s7OwTWfIn0L/gHkhgJ4VMGbo | |||
| # QhJeGsieIiHQQ+kr6bv0SMws1NgygEwmKkgkX1rqVu+m3pmdyjpvvYEndAYR7nYh | |||
| # v5uCwSdUtrFqPYmhdmG0bqETpr+qR/ASb/2KMmyy/t9RyIwjyWa9nR2HEmQCPS2v | |||
| # WY+45CHltbDKY7R4VAXUQS5QrJSwpXirs6CWdRrZkocTdSIvMqgIbqBbjCW/oO+E | |||
| # yiHW6x5PyZruSeD3AWVviQt9yGnI5m7qp5fOMSn/DsVbXNhNG6HY+i+ePy5VFmvJ | |||
| # E6P9MYIEgzCCBH8CAQEwgYcweTELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hp | |||
| # bmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jw | |||
| # b3JhdGlvbjEjMCEGA1UEAxMaTWljcm9zb2Z0IENvZGUgU2lnbmluZyBQQ0ECCmEZ | |||
| # zJMAAQAAAGYwCQYFKw4DAhoFAKCBsDAZBgkqhkiG9w0BCQMxDAYKKwYBBAGCNwIB | |||
| # BDAcBgorBgEEAYI3AgELMQ4wDAYKKwYBBAGCNwIBFTAjBgkqhkiG9w0BCQQxFgQU | |||
| # aRQ2a/UgAzqOb3Wvyd0Y2tRWtIEwUAYKKwYBBAGCNwIBDDFCMECgIoAgAEUAbgB0 | |||
| # AGkAdAB5ACAARgByAGEAbQBlAHcAbwByAGuhGoAYaHR0cDovL21zZG4uY29tL2Rh | |||
| # dGEvZWYgMA0GCSqGSIb3DQEBAQUABIIBAMQdz1xbjYGj57Z6LNm3laDw2S6QJFye | |||
| # QUSbvlY7kcxqlHQrERkp3wwR34emJSnTayLTcTPaCCvzUaGsZi86i+IW6HdA/3A/ | |||
| # IwEZgAkai/qXZCYEEBvV9ja+iMRowFPAySU+ROh4LFbCTLzm4vez6qaLyui/JQNr | |||
| # 46DZptV5XM0idAbgOfmtCMMipqRkrNqt7Zj8cuxu3cJBKOvhUOdLfEIxq1UW9pNy | |||
| # 8c/aOStE0kLFInw3G1GL9IJnS43eTcgeIDMkrwX70o+rLS7lN1U3txL25IrBTUcY | |||
| # Q6dxj4zSDxIjn3Tq2jqa8B6lR1OMEahj4INmR6vC+mFNspHODHWgt7GhggIdMIIC | |||
| # GQYJKoZIhvcNAQkGMYICCjCCAgYCAQEwgYUwdzELMAkGA1UEBhMCVVMxEzARBgNV | |||
| # BAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jv | |||
| # c29mdCBDb3Jwb3JhdGlvbjEhMB8GA1UEAxMYTWljcm9zb2Z0IFRpbWUtU3RhbXAg | |||
| # UENBAgphBRmWAAAAAAAbMAcGBSsOAwIaoF0wGAYJKoZIhvcNAQkDMQsGCSqGSIb3 | |||
| # DQEHATAcBgkqhkiG9w0BCQUxDxcNMTIwNjI4MjA0MzU0WjAjBgkqhkiG9w0BCQQx | |||
| # FgQUlE+8FmmwI9Hd6gz+luAdOPsKxHgwDQYJKoZIhvcNAQEFBQAEggEAiJCupwRm | |||
| # YW3NHK2EdgaQ+VCIjXwVrEj6ElX4c30nAYXxnCOIesErL/N/jMYnM3Fo+GNsOikL | |||
| # x9Mzo4sZv/c6bchLtnagS6MzQyDFiBPF+pngSMg2PpIDHsIBg2vPzClWx6+hCDxE | |||
| # Yf9f7/s/vQEpEbHLjzQZJqoji2LV5HRxnHbT3J13atUF2yqgzyTRlOF2MPp3vLX1 | |||
| # 7q5KnOBrWsfyxoYskJEddsbH7zilomWyVZ2zcpG8Ui/h2xoN50AXtMQntx9VYxwT | |||
| # D5U5ECSdKzXeUIwktYBPtxor5yGBda63PNxjUHYXSRvFrdnLtXTiMiIQzEzJUdk9 | |||
| # 6p75IHbjyjvZfg== | |||
| # SIG # End signature block | |||
| @ -0,0 +1,377 @@ | |||
| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> | |||
| <html xmlns="http://www.w3.org/1999/xhtml"> | |||
| <head> | |||
| <meta content="text/html; charset=utf-8" http-equiv="Content-Type" /> | |||
| <title>ASP.NET Universal Providers Readme</title> | |||
| <style type="text/css"> | |||
| body{ | |||
| margin-left:1in; | |||
| margin-top:.75in; | |||
| margin-right:1.7in; | |||
| font-family:calibri; | |||
| font-size:11pt; | |||
| line-height:1.15em; | |||
| background-color:white; | |||
| } | |||
| h1{ | |||
| margin-left:-.2in; | |||
| font-family:Arial, Verdana, sans-serif; | |||
| font-size:20pt; | |||
| } | |||
| h2{ | |||
| margin-left:-.2in; | |||
| margin-top:1.8em; | |||
| font-family:Arial, Verdana, sans-serif; | |||
| font-size:16pt; | |||
| } | |||
| h3{ | |||
| margin-left:-.2in; | |||
| font-family:Verdana, sans-serif; | |||
| font-size:13.5pt; | |||
| } | |||
| table{ | |||
| border:thin gray groove; | |||
| } | |||
| thead{ | |||
| background-color:black; | |||
| color:white; | |||
| font-weight:bold; | |||
| text-align:center; | |||
| } | |||
| td{ | |||
| border:1px solid black; | |||
| } | |||
| p.indent1{ | |||
| margin-left:.25in; | |||
| } | |||
| code{ | |||
| font-family:"Courier New"; | |||
| font-size:10pt; | |||
| color:#006600; | |||
| } | |||
| pre{ | |||
| font-family:"Courier New"; | |||
| font-size:10pt; | |||
| padding:8px; | |||
| color:#006600; | |||
| } | |||
| span.highlight{ | |||
| background-color:Yellow; | |||
| } | |||
| </style> | |||
| </head> | |||
| <body> | |||
| <h1>ASP.NET Universal Providers</h1> | |||
| <p>Last update: 15 August 2012</p> | |||
| <p>The | |||
| <a href="http://msdn.microsoft.com/en-us/library/system.web.security.sqlmembershipprovider.aspx">SqlMembershipProvider</a>, | |||
| <a href="http://msdn.microsoft.com/en-us/library/system.web.security.sqlroleprovider.aspx">SqlRoleProvider</a>, | |||
| <a href="http://msdn.microsoft.com/en-us/library/system.web.profile.sqlprofileprovider.aspx">SqlProfileProvider</a> classes that shipped in ASP.NET through version 4 support only Microsoft SQL Server and Microsoft SQL Server Express. They do not support newer offerings such as | |||
| <a href="http://msdn.microsoft.com/en-us/library/ee336241.aspx">Microsoft SQL Azure</a> and | |||
| <a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=033cfb76-5382-44fb-bc7e-b3c8174832e2">Microsoft SQL Server Compact</a>. </p> | |||
| <p>ASP.NET Universal Providers have been created in order to extend support to all editions of SQL Server 2005 and later and to SQL Azure. If you use these providers to develop your application, the application will be ready for cloud environments like Azure.</p> | |||
| <p>Other than supporting additional storage options, the providers work like the existing SQL-based providers. Except as noted below, using ASP.NET Universal Providers requires no change in any of your applications.</p> | |||
| <ul> | |||
| <li><a href="#Installing_and_Configuring_ASP.NET_Unive">Installing and | |||
| Configuring ASP.NET Universal Providers</a></li> | |||
| <li><a href="#Selecting_a_Data_Store">Selecting a Data Store</a></li> | |||
| <li><a href="#Storing_Data_in_Session_State_using_ASP">Storing Data in | |||
| Session State using ASP.NET Universal Providers</a></li> | |||
| <li><a href="#Deploying_to_a_Cloud_Environment">Deploying to a Cloud | |||
| Environment</a></li> | |||
| <li><a href="#Known_Issues">Known Issues</a></li> | |||
| <li><a href="#Additional_Resources">Additional Resources</a></li> | |||
| <li><a href="#Disclaimer">Disclaimer</a><br /> | |||
| </li> | |||
| </ul> | |||
| <h2><a name="Installing_and_Configuring_ASP.NET_Unive">Installing and Configuring ASP.NET Universal Providers</a></h2> | |||
| <p>To install ASP.NET Universal Providers, you use a NuGet package, which installs all required files (including this documentation). The NuGet package automatically enables the new providers when it is installed. By default, the NuGet package configures provider to use SQL Server Express. To use SQL Server Compact or SQL Azure, you must change the connection string for the provider, as explained | |||
| <a href="#Selecting_a_Data_Store">later in this document</a>.</p> | |||
| <p>To enable the providers, the NuGet package adds configuration entries in the | |||
| <em>web.config</em> file. The configuration for these providers is the same as the existing | |||
| <code>SqlMembershipProvider</code> class, but the <code>type</code> parameter is set to the type of the new providers, as shown in the following table:</p> | |||
| <table> | |||
| <thead> | |||
| <td>SQL Provider Types</td> | |||
| <td>Equivalent Type for Universal Providers</td> | |||
| </thead> | |||
| <tr> | |||
| <td ><code>System.Web.Security.SqlMembershipProvider</code></td> | |||
| <td ><code>System.Web.Providers.DefaultMembershipProvider</code></td> | |||
| </tr> | |||
| <tr> | |||
| <td><code>System.Web.Profile.SqlProfileProvider</code></td> | |||
| <td><code>System.Web.Providers.DefaultProfileProvider</code></td> | |||
| </tr> | |||
| <tr> | |||
| <td><code>System.Web.Security.SqlRoleProvider</code></td> | |||
| <td><code>System.Web.Providers.DefaultRoleProvider</code></td> | |||
| </tr> | |||
| <tr> | |||
| <td>(Built into default provider)</td> | |||
| <td><code>System.Web.Providers.DefaultSessionStateProvider</code></td> | |||
| </tr> | |||
| </table> | |||
| <p>In the <em>web.config</em> file, the configuration looks like the following example (the connection string has been wrapped for readability). The differences from the configuration for older SQL-based providers are highlighted. Notice that a section has been added to define custom session-state handling using a custom provider, as described later under | |||
| <a href="#Storing_Data_in_Session_State_using_ASP">Storing Data in Session State using ASP.NET Universal Providers</a>.</p> | |||
| <pre><configuration> | |||
| <connectionStrings> | |||
| <add name="DefaultConnection" | |||
| connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=aspnetdb;Integrated Security=True" | |||
| providerName="System.Data.SqlClient" /> | |||
| </connectionStrings> | |||
| <system.web> | |||
| <membership <span class="highlight">defaultProvider="DefaultMembershipProvider"</span>> | |||
| <providers> | |||
| <clear /> | |||
| <add name="DefaultMembershipProvider" | |||
| <span class="highlight">type="System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" | |||
| </span> connectionStringName="DefaultConnection" | |||
| enablePasswordRetrieval="false" | |||
| enablePasswordReset="true" | |||
| requiresQuestionAndAnswer="false" | |||
| requiresUniqueEmail="false" | |||
| maxInvalidPasswordAttempts="5" | |||
| minRequiredPasswordLength="6" | |||
| minRequiredNonalphanumericCharacters="0" | |||
| passwordAttemptWindow="10" | |||
| applicationName="/" /> | |||
| </providers> | |||
| </membership> | |||
| <profile <span class="highlight">defaultProvider="DefaultProfileProvider"</span>> | |||
| <providers> | |||
| <clear /> | |||
| <add name="DefaultProfileProvider" | |||
| <span class="highlight">type="System.Web.Providers.DefaultProfileProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" | |||
| </span> connectionStringName="DefaultConnection" | |||
| applicationName="/" /> | |||
| </providers> | |||
| </profile> | |||
| <roleManager <span class="highlight">defaultProvider="DefaultRoleProvider"</span> enabled="false"> | |||
| <providers> | |||
| <clear /> | |||
| <add name="DefaultRoleProvider" | |||
| <span class="highlight">type="System.Web.Providers.DefaultRoleProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" | |||
| </span> connectionStringName="DefaultConnection" | |||
| applicationName="/" /> | |||
| </providers> | |||
| </roleManager> | |||
| <sessionState mode="Custom" customProvider="DefaultSessionProvider"> | |||
| <providers> | |||
| <add name="DefaultSessionProvider" | |||
| <span class="highlight">type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" | |||
| </span> connectionStringName="DefaultConnection" | |||
| applicationName="/" /> | |||
| </providers> | |||
| </sessionState> | |||
| </system.web> </pre> | |||
| <h2><a name="Selecting_a_Data_Store">Selecting a Data Store</a></h2> | |||
| <p>If you want to use SQL Server LocalDB database,change the connection string as shown in the following example:</p> | |||
| <pre> | |||
| <connectionStrings> | |||
| <add name="DefaultConnection" providerName="System.Data.SqlClient" | |||
| connectionString="Data Source=(LocalDb)\v11.0; | |||
| Initial Catalog=aspnet-ProjectName-GUID;Integrated Security=SSPI; | |||
| AttachDBFilename=|DataDirectory|\aspnet-ProjectName-GUID.mdf" /> | |||
| <connectionStrings> | |||
| </pre> | |||
| <p>If you want to use SQL Server Express database,change the connection string as shown in the following example:</p> | |||
| <pre> | |||
| <connectionStrings> | |||
| <add name="DefaultConnection" providerName="System.Data.SqlClient" | |||
| connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=aspnetdb; | |||
| Integrated Security=True" providerName="System.Data.SqlClient"/> | |||
| <connectionStrings> | |||
| </pre> | |||
| <p>If you want to use SQL Server Compact, change the connection string as shown in the following example:</p> | |||
| <pre><connectionStrings> | |||
| <add name="DefaultConnection" connectionString="Data Source=|DataDirectory|\aspnet.sdf" | |||
| providerName="System.Data.SqlServerCe.4.0"/> | |||
| </connectionStrings></pre> | |||
| <p>If you want to use SQL Azure, change the connection string as shown in the | |||
| following example (wrapped for readability):</p> | |||
| <pre><connectionStrings> | |||
| <add name="DefaultConnection" | |||
| connectionString="data source=myDNSName; | |||
| User ID=myUserName;Password=myPassword; | |||
| Encrypt=true;Trusted_Connection=false=false" | |||
| providerName="System.Data.SqlClient"/> | |||
| <connectionStrings></pre> | |||
| <h2><a name="Storing_Data_in_Session_State_using_ASP">Storing Data in Session State using ASP.NET Universal Providers</a></h2> | |||
| <p>By default, ASP.NET stores session data using an in-process (in-memory) session provider. This provider allows you to put any object in session state, because session state simply holds a reference to the object, not the object itself.</p> | |||
| <p>However, cloud environments might run your application on multiple computers. Therefore, for cloud-based applications, the application must store session state in some form of storage (like a database) that be accessed by more than one machine. This puts some restrictions on what data you store in session state — essentially, the data must be serializable. </p> | |||
| <p>When you install ASP.NET Universal Providers, the installation process configures session state to use the | |||
| <code>System.Web.Providers.DefaultSessionStateProvider</code> type, as shown in the | |||
| <em>web.config</em> file example earlier. This type stores session state in a database.</p> | |||
| <p>Session data must be serializable. If you attempt to store something in session state that is not serializable, you will receive the following error: </p> | |||
| <p class="indent1"><code>Unable to serialize the session state. In 'StateServer' and 'SQLServer' mode, ASP.NET will serialize the session state objects, and as a result non-serializable objects or MarshalByRef objects are not permitted. the same restriction applies if similar serialization is done by the custom session state store in 'Custom' mode. </code></p> | |||
| <p>There are two ways to resolve this issue: by marking the type as serializable or by using a surrogate serializer.</p> | |||
| <h3>Marking Types as Serializable</h3> | |||
| <p>If you have access to the source code for the type that is being stored in session state, you can mark the type using the | |||
| <code>Serializable</code> attribute, as in the following example. If the type contains additional classes, all the contained classes must be serializable as well.</p> | |||
| <pre><span class="highlight">[Serializable]</span> | |||
| public class Address { } | |||
| <span class="highlight">[Serializable]</span> | |||
| public class Person { | |||
| public Address Work; | |||
| public Address Home; | |||
| }</pre> | |||
| <h3>Using a Surrogate Serializer in .NET Framework 4.5</h3> | |||
| <p>If it's not practical to mark the type as serializable in source code, and if you are using .NET Framework 4.5, you can use a surrogate serializer. (This technique does not work in .NET Framework 4.)</p> | |||
| <p>Create a class that implements the | |||
| <a href="http://msdn.microsoft.com/en-us/library/system.runtime.serialization.iserializationsurrogate.aspx">ISerializationSurrogate</a> interface. In this class, you implement | |||
| <a href="http://msdn.microsoft.com/en-us/library/system.runtime.serialization.iserializationsurrogate.getobjectdata.aspx">GetObjectData</a> and | |||
| <a href="http://msdn.microsoft.com/en-us/library/system.runtime.serialization.iserializationsurrogate.setobjectdata.aspx">SetObjectData</a> methods in order to serialize and deserialze the data, respectively. In | |||
| <code>GetObjectData</code> you invoke | |||
| <a href="http://msdn.microsoft.com/en-us/library/system.runtime.serialization.serializationinfo.addvalue.aspx">SerializationInfo.AddValue</a> (using the appropriate overload for the data type of your data) to add individual fields of the object to serialize to a | |||
| <a href="http://msdn.microsoft.com/en-us/library/system.runtime.serialization.serializationinfo.aspx">SerializationInfo</a> object. In | |||
| <code>SetObjectData</code> you extract the serialized version back to its original value in the object. Here's an example:</p> | |||
| <pre>public class EmployeeSerializationSurrogate : ISerializationSurrogate | |||
| { | |||
| // Serialize the Employee object to save the object name and address fields. | |||
| public void GetObjectData(Object obj, SerializationInfo info, StreamingContext context) | |||
| { | |||
| Employee emp = (Employee)obj; | |||
| info.AddValue("name", emp.name); | |||
| info.AddValue("address", emp.address); | |||
| } | |||
| // Deserialize the Employee object to set the object name and address fields. | |||
| public Object SetObjectData(Object obj, SerializationInfo info, StreamingContext context, | |||
| ISurrogateSelector selector) | |||
| { | |||
| Employee emp = (Employee)obj; | |||
| emp.name = info.GetString("name"); | |||
| emp.address = info.GetString("address"); | |||
| return null; | |||
| } | |||
| }</pre> | |||
| <p>You then register the serializer and the class to be serialized using the | |||
| <a href="http://msdn.microsoft.com/en-us/library/system.runtime.serialization.surrogateselector.aspx">SurrogateSelector</a> class in code, like this:</p> | |||
| <pre>protected void Page_Load(object sender, EventArgs e) | |||
| { | |||
| SurrogateSelector ss = new SurrogateSelector(); | |||
| ss.AddSurrogate(typeof(Employee), new StreamingContext(StreamingContextStates.All), new EmployeeSerializationSurrogate()); | |||
| SessionStateUtility.SerializationSurrogateSelector = ss; | |||
| }</pre> | |||
| <h2><a name="Deploying_to_a_Cloud_Environment">Deploying to a Cloud Environment</a></h2> | |||
| <p>If you are deploying to a cloud environment that has multiple web server instances, you should change session state mode from "InProc" to "Custom". In addition, change the connection string named "DefaultConnection" to connect to an instance of SQL Server (including SQL Azure and SQL Compact) instead of to SQL Server Express.</p> | |||
| <h2><a name="Known_Issues">Known Issues</a></h2> | |||
| <ul> | |||
| <li> | |||
| <p>During the installation process, NuGet performs an exact match on items in the | |||
| <em>web.config</em> file. If you have customized any of the elements in <em>web.config</em> that are updated by the installation process for ASP.NET Universal Providers, the installation process will not find these elements. Instead of updating the elements, the installation process will assume that they do not exist and add them. As a result, the | |||
| <em>web.config</em> will effectively contain duplicate elements.</p> | |||
| <p>If your application is experiencing issues that indicate problems in the <em>web.config</em> file, make sure that the file contains the elements that are illustrated earlier in this document and remove any duplicate elements.</p> | |||
| </li> | |||
| <li> | |||
| <p>If you are working in Visual Studio and use <strong>Server Explorer</strong> to open the database that contains the membership, role, profile, or session provider tables, and if you then try to run the application, you might see an error like the following: </p> | |||
| <p><code>Cannot open database "aspnet" requested by the login. The login failed. Login failed for user 'yourname.'</code></p> | |||
| <p>To resolve this issue, right-click the database in <strong>Server Explorer</strong> and then click | |||
| <strong>Close Connection</strong>. </p> | |||
| </li> | |||
| <li> | |||
| <p>The new providers do not use the same tables, stored procedures, and database objects as the SQL-based providers. If you switch to the new providers in an existing application, the data from the existing tables will not be available. We are considering creating a conversion utility to help you move existing applications to the new providers.</p> | |||
| </li> | |||
| <li> | |||
| <p>Web Parts personalization will not work with Universal Providers. You must use the SQL Personalization provider. That in turn does not work with LocalDB, so you must use SQL Server Express.</p> | |||
| </li> | |||
| <li> | |||
| <p>This release requires that the ASP.NET application be running under full trust.</p> | |||
| </li> | |||
| </ul> | |||
| <h2><a name="Additional_Resources">Additional Resources</a></h2> | |||
| <ul> | |||
| <li><a href="http://msdn.microsoft.com/en-us/library/tw292whz.aspx">Managing Users by Using Membership</a></li> | |||
| <li><a href="http://msdn.microsoft.com/en-us/library/9ab2fxh0.aspx">Managing Authorization Using Roles</a></li> | |||
| <li><a href="http://msdn.microsoft.com/en-us/library/014bec1k.aspx">ASP.NET Profile Providers</a></li> | |||
| <li><a href="http://msdn.microsoft.com/en-us/library/ee336241.aspx">Microsoft SQL Azure</a></li> | |||
| <li> | |||
| <a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=033cfb76-5382-44fb-bc7e-b3c8174832e2">Microsoft SQL Server Compact</a></li> | |||
| <li> | |||
| <a href="http://docs.nuget.org/docs/creating-packages/configuration-file-and-source-code-transformations">Configuration File and Source Code Transformations</a></li> | |||
| <li><a href="http://go.microsoft.com/fwlink/?LinkId=261899">Migration for user accounts from the SQL MembershipProvider to the Universal Providers</a></li> | |||
| </ul> | |||
| <h2><a name="Disclaimer">Disclaimer</a></h2> | |||
| <p>This is a preliminary document and may be changed substantially prior to final commercial release of the software described herein.</p> | |||
| <p>The information contained in this document represents the current view of Microsoft Corporation on the issues discussed as of the date of publication. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information presented after the date of publication.</p> | |||
| <p>This White Paper is for informational purposes only. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS DOCUMENT. | |||
| <p>Complying with all applicable copyright laws is the responsibility of the user. Without limiting the rights under copyright, no part of this document may be reproduced, stored in or introduced into a retrieval system, or transmitted in any form or by any means (electronic, mechanical, photocopying, recording, or otherwise), or for any purpose, without the express written permission of Microsoft Corporation.</p> | |||
| <p>Microsoft may have patents, patent applications, trademarks, copyrights, or other intellectual property rights covering subject matter in this document. Except as expressly provided in any written license agreement from Microsoft, the furnishing of this document does not give you any license to these patents, trademarks, copyrights, or other intellectual property.</p> | |||
| <p>Unless otherwise noted, the example companies, organizations, products, domain names, e-mail addresses, logos, people, places and events depicted herein are fictitious, and no association with any real company, organization, product, domain name, email address, logo, person, place or event is intended or should be inferred.</p> | |||
| <p>© 2011 Microsoft Corporation. All rights reserved.</p> | |||
| <p>Microsoft and Windows are either registered trademarks or trademarks of Microsoft Corporation in the United States and/or other countries.</p> | |||
| <p>The names of actual companies and products mentioned herein may be the trademarks of their respective owners.</p> | |||
| </body> | |||
| </html> | |||
| @ -0,0 +1,33 @@ | |||
| <configuration> | |||
| <system.web> | |||
| <profile defaultProvider="DefaultProfileProvider" > | |||
| <providers> | |||
| <add name="DefaultProfileProvider" type="System.Web.Providers.DefaultProfileProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/"/> | |||
| </providers> | |||
| </profile> | |||
| <membership defaultProvider="DefaultMembershipProvider"> | |||
| <providers> | |||
| <add name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" | |||
| enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" | |||
| maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" | |||
| applicationName="/" /> | |||
| </providers> | |||
| </membership> | |||
| <roleManager defaultProvider="DefaultRoleProvider"> | |||
| <providers> | |||
| <add name="DefaultRoleProvider" type="System.Web.Providers.DefaultRoleProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/" /> | |||
| </providers> | |||
| </roleManager> | |||
| <!-- | |||
| If you are deploying to a cloud environment that has multiple web server instances, | |||
| you should change session state mode from "InProc" to "Custom". In addition, | |||
| change the connection string named "DefaultConnection" to connect to an instance | |||
| of SQL Server (including SQL Azure and SQL Compact) instead of to SQL Server Express. | |||
| --> | |||
| <sessionState mode="InProc" customProvider="DefaultSessionProvider"> | |||
| <providers> | |||
| <add name="DefaultSessionProvider" type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection"/> | |||
| </providers> | |||
| </sessionState> | |||
| </system.web> | |||
| </configuration> | |||
| @ -0,0 +1,211 @@ | |||
| param($installPath, $toolsPath, $package, $project) | |||
| try { | |||
| # Set up variables | |||
| $timestamp = (Get-Date).ToString('yyyyMMddHHmmss') | |||
| $projectName = [IO.Path]::GetFileName($project.ProjectName.Trim([IO.PATH]::DirectorySeparatorChar, [IO.PATH]::AltDirectorySeparatorChar)) | |||
| $catalogName = "aspnet-$projectName-$timestamp" | |||
| $connectionString ="Data Source=(LocalDb)\v11.0;Initial Catalog=$catalogName;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\$catalogName.mdf" | |||
| $connectionStringToken = 'Data Source=(LocalDb)\v11.0;' | |||
| $config = $project.ProjectItems | Where-Object { $_.Name -eq "Web.config" } | |||
| $configPath = ($config.Properties | Where-Object { $_.Name -eq "FullPath" }).Value | |||
| #Load the Config File | |||
| $xml = New-Object System.Xml.XmlDocument | |||
| $xml.Load($configPath) | |||
| function CommentNode($node) { | |||
| if (!$node) { | |||
| return; | |||
| } | |||
| $commentNode = $xml.CreateComment($node.OuterXml) | |||
| $parent = $node.ParentNode | |||
| $parent.InsertBefore($commentNode, $node) | Out-Null | |||
| $parent.RemoveChild($node) | Out-Null | |||
| } | |||
| # Comment out older providers | |||
| $node = $xml.SelectSingleNode("/configuration/system.web/membership/providers/add[@type='System.Web.Security.SqlMembershipProvider']") | |||
| $oldConnectionNode = $xml.SelectSingleNode("/configuration/connectionStrings/add[@name='$($node.connectionStringName)']") | |||
| CommentNode $node | |||
| CommentNode $oldConnectionNode | |||
| $node = $xml.SelectSingleNode("/configuration/system.web/profile/providers/add[@type='System.Web.Profile.SqlProfileProvider']") | |||
| $oldConnectionNode = $xml.SelectSingleNode("/configuration/connectionStrings/add[@name='$($node.connectionStringName)']") | |||
| CommentNode $node | |||
| CommentNode $oldConnectionNode | |||
| $node = $xml.SelectSingleNode("/configuration/system.web/roleManager/providers/add[@type='System.Web.Security.SqlRoleProvider']") | |||
| $oldConnectionNode = $xml.SelectSingleNode("/configuration/connectionStrings/add[@name='$($node.connectionStringName)']") | |||
| $connectionStringsToComment += $node.connectionStringName | |||
| CommentNode $node | |||
| CommentNode $oldConnectionNode | |||
| # Verify that the connectionStrings node exists | |||
| $connectionStrings = $xml.SelectSingleNode("/configuration/connectionStrings") | |||
| if (!$connectionStrings) { | |||
| $connectionStrings = $xml.CreateElement("connectionStrings") | |||
| $xml.configuration.AppendChild($connectionStrings) | Out-Null | |||
| } | |||
| if (!($connectionStrings.SelectNodes("add[@name='DefaultConnection']") | Where { $_.connectionString.StartsWith($connectionStringToken, 'OrdinalIgnoreCase') })) { | |||
| # If there aren't any connection strings that look like ours, proceed to add one | |||
| $newConnectionNode = $xml.CreateElement("add") | |||
| $newConnectionNode.SetAttribute("name", 'DefaultConnection') | |||
| $newConnectionNode.SetAttribute("providerName", "System.Data.SqlClient") | |||
| $newConnectionNode.SetAttribute("connectionString", $connectionString) | |||
| $connectionStrings.AppendChild($newConnectionNode) | Out-Null | |||
| } | |||
| # Save the Config File | |||
| $xml.Save($configPath) | |||
| } catch { | |||
| Write-Error "Unable to update the web.config file at $configPath. Add the following connection string to your config: <add name=`"DefaultConnection`" providerName=`"System.Data.SqlClient`" connectionString=`"$connectionString`" />" | |||
| } | |||
| # SIG # Begin signature block | |||
| # MIIaRAYJKoZIhvcNAQcCoIIaNTCCGjECAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB | |||
| # gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR | |||
| # AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQUCI4oa6SQz5TLmVruHOoK6N6p | |||
| # eUqgghUtMIIEoDCCA4igAwIBAgIKYRnMkwABAAAAZjANBgkqhkiG9w0BAQUFADB5 | |||
| # MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVk | |||
| # bW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSMwIQYDVQQDExpN | |||
| # aWNyb3NvZnQgQ29kZSBTaWduaW5nIFBDQTAeFw0xMTEwMTAyMDMyMjVaFw0xMzAx | |||
| # MTAyMDMyMjVaMIGDMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQ | |||
| # MA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9u | |||
| # MQ0wCwYDVQQLEwRNT1BSMR4wHAYDVQQDExVNaWNyb3NvZnQgQ29ycG9yYXRpb24w | |||
| # ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDuW759ESTjhgbgZv9ItRe9 | |||
| # AuS0DDLwcj59LofXTqGxp0Mv92WeMeEyMUWu18EkhCHXLrWEfvo101Mc17ZRHk/O | |||
| # ZrnrtwwC/SlcraiH9soitNW/CHX1inCPY9fvih7pj0MkZFrTh32QbTusds1XNn3o | |||
| # vBBWrJjwiV0uZMavJgleHmMV8T2/Fo+ZiALDMLfBC2AfD3LM1reoNRKGm6ELCuaT | |||
| # W476VJzB8xlfQo0Snx0/kLcnE4MZMoId89mH1CGyPKK2B0/XJKrujfWz2fr5OU+n | |||
| # 6fKvWVL03EGbLxFwY93q3qrxbSEEEFMzu7JPxeFTskFlR2439rzpmxZBkWsuWzDD | |||
| # AgMBAAGjggEdMIIBGTATBgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQUG1IO | |||
| # 8xEqt8CJwxGBPdSWWLmjU24wDgYDVR0PAQH/BAQDAgeAMB8GA1UdIwQYMBaAFMsR | |||
| # 6MrStBZYAck3LjMWFrlMmgofMFYGA1UdHwRPME0wS6BJoEeGRWh0dHA6Ly9jcmwu | |||
| # bWljcm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01pY0NvZFNpZ1BDQV8wOC0z | |||
| # MS0yMDEwLmNybDBaBggrBgEFBQcBAQROMEwwSgYIKwYBBQUHMAKGPmh0dHA6Ly93 | |||
| # d3cubWljcm9zb2Z0LmNvbS9wa2kvY2VydHMvTWljQ29kU2lnUENBXzA4LTMxLTIw | |||
| # MTAuY3J0MA0GCSqGSIb3DQEBBQUAA4IBAQClWzZsrU6baRLjb4oCm2l3w2xkciiI | |||
| # 2T1FbSwYe9QoLxPiWWobwgs0t4r96rmU7Acx5mr0dQTTp9peOgaeEP2pDb2cUUNv | |||
| # /2eUnOHPfPAksDXMg13u2sBvNknAWgpX9nPhnvPjCEw7Pi/M0s3uTyJw9wQfAqZL | |||
| # m7iPXIgONpRsMwe4qa1RoNDC3I4iEr3D34LXVqH33fClIFcQEJ3urIZ0bHGbwfDy | |||
| # wnBep9ttTTdYmU15QNA0XVolrmfrG05GBrCMKR+jEI+lM58j1fi1Rn3g7mOYkEs+ | |||
| # BagvsBizWaSvQVOOCAUQLSrJOgZMHC6pMVFWZKyazKyXmCmKl5CH6p22MIIEujCC | |||
| # A6KgAwIBAgIKYQUTNgAAAAAAGjANBgkqhkiG9w0BAQUFADB3MQswCQYDVQQGEwJV | |||
| # UzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UE | |||
| # ChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSEwHwYDVQQDExhNaWNyb3NvZnQgVGlt | |||
| # ZS1TdGFtcCBQQ0EwHhcNMTEwNzI1MjA0MjE3WhcNMTIxMDI1MjA0MjE3WjCBszEL | |||
| # MAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1v | |||
| # bmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjENMAsGA1UECxMETU9Q | |||
| # UjEnMCUGA1UECxMebkNpcGhlciBEU0UgRVNOOjE1OUMtQTNGNy0yNTcwMSUwIwYD | |||
| # VQQDExxNaWNyb3NvZnQgVGltZS1TdGFtcCBTZXJ2aWNlMIIBIjANBgkqhkiG9w0B | |||
| # AQEFAAOCAQ8AMIIBCgKCAQEAnDSYGckJKWOZAhZ1qIhXfaG7qUES/GSRpdYFeL93 | |||
| # 3OzmrrhQTsDjGr3tt/34IIpxOapyknKfignlE++RQe1hJWtRre6oQ7VhQiyd8h2x | |||
| # 0vy39Xujc3YTsyuj25RhgFWhD23d2OwW/4V/lp6IfwAujnokumidj8bK9JB5euGb | |||
| # 7wZdfvguw2oVnDwUL+fVlMgiG1HLqVWGIbda80ESOZ/wValOqiUrY/uRcjwPfMCW | |||
| # ctzBo8EIyt7FybXACl+lnAuqcgpdCkB9LpjQq7KIj4aA6H3RvlVr4FgsyDY/+eYR | |||
| # w/BDBYV4AxflLKcpfNPilRcAbNvcrTwZOgLgfWLUzvYdPQIDAQABo4IBCTCCAQUw | |||
| # HQYDVR0OBBYEFPaDiyCHEe6Dy9vehaLSaIY3YXSQMB8GA1UdIwQYMBaAFCM0+NlS | |||
| # RnAK7UD7dvuzK7DDNbMPMFQGA1UdHwRNMEswSaBHoEWGQ2h0dHA6Ly9jcmwubWlj | |||
| # cm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01pY3Jvc29mdFRpbWVTdGFtcFBD | |||
| # QS5jcmwwWAYIKwYBBQUHAQEETDBKMEgGCCsGAQUFBzAChjxodHRwOi8vd3d3Lm1p | |||
| # Y3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY3Jvc29mdFRpbWVTdGFtcFBDQS5jcnQw | |||
| # EwYDVR0lBAwwCgYIKwYBBQUHAwgwDQYJKoZIhvcNAQEFBQADggEBAGL0BQ1P5xtr | |||
| # gudSDN95jKhVgTOX06TKyf6vSNt72m96KE/H0LeJ2NGmmcyRVgA7OOi3Mi/u+c9r | |||
| # 2Zje1gL1QlhSa47aQNwWoLPUvyYVy0hCzNP9tPrkRIlmD0IOXvcEnyNIW7SJQcTa | |||
| # bPg29D/CHhXfmEwAxLLs3l8BAUOcuELWIsiTmp7JpRhn/EeEHpFdm/J297GOch2A | |||
| # djw2EUbKfjpI86/jSfYXM427AGOCnFejVqfDbpCjPpW3/GTRXRjCCwFQY6f889GA | |||
| # noTjMjTdV5VAo21+2usuWgi0EAZeMskJ6TKCcRan+savZpiJ+dmetV8QI6N3gPJN | |||
| # 1igAclCFvOUwggW8MIIDpKADAgECAgphMyYaAAAAAAAxMA0GCSqGSIb3DQEBBQUA | |||
| # MF8xEzARBgoJkiaJk/IsZAEZFgNjb20xGTAXBgoJkiaJk/IsZAEZFgltaWNyb3Nv | |||
| # ZnQxLTArBgNVBAMTJE1pY3Jvc29mdCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0 | |||
| # eTAeFw0xMDA4MzEyMjE5MzJaFw0yMDA4MzEyMjI5MzJaMHkxCzAJBgNVBAYTAlVT | |||
| # MRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQK | |||
| # ExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xIzAhBgNVBAMTGk1pY3Jvc29mdCBDb2Rl | |||
| # IFNpZ25pbmcgUENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsnJZ | |||
| # XBkwZL8dmmAgIEKZdlNsPhvWb8zL8epr/pcWEODfOnSDGrcvoDLs/97CQk4j1XIA | |||
| # 2zVXConKriBJ9PBorE1LjaW9eUtxm0cH2v0l3511iM+qc0R/14Hb873yNqTJXEXc | |||
| # r6094CholxqnpXJzVvEXlOT9NZRyoNZ2Xx53RYOFOBbQc1sFumdSjaWyaS/aGQv+ | |||
| # knQp4nYvVN0UMFn40o1i/cvJX0YxULknE+RAMM9yKRAoIsc3Tj2gMj2QzaE4BoVc | |||
| # TlaCKCoFMrdL109j59ItYvFFPeesCAD2RqGe0VuMJlPoeqpK8kbPNzw4nrR3XKUX | |||
| # no3LEY9WPMGsCV8D0wIDAQABo4IBXjCCAVowDwYDVR0TAQH/BAUwAwEB/zAdBgNV | |||
| # HQ4EFgQUyxHoytK0FlgByTcuMxYWuUyaCh8wCwYDVR0PBAQDAgGGMBIGCSsGAQQB | |||
| # gjcVAQQFAgMBAAEwIwYJKwYBBAGCNxUCBBYEFP3RMU7TJoqV4ZhgO6gxb6Y8vNgt | |||
| # MBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMB8GA1UdIwQYMBaAFA6sgmBAVieX | |||
| # 5SUT/CrhClOVWeSkMFAGA1UdHwRJMEcwRaBDoEGGP2h0dHA6Ly9jcmwubWljcm9z | |||
| # b2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL21pY3Jvc29mdHJvb3RjZXJ0LmNybDBU | |||
| # BggrBgEFBQcBAQRIMEYwRAYIKwYBBQUHMAKGOGh0dHA6Ly93d3cubWljcm9zb2Z0 | |||
| # LmNvbS9wa2kvY2VydHMvTWljcm9zb2Z0Um9vdENlcnQuY3J0MA0GCSqGSIb3DQEB | |||
| # BQUAA4ICAQBZOT5/Jkav629AsTK1ausOL26oSffrX3XtTDst10OtC/7L6S0xoyPM | |||
| # fFCYgCFdrD0vTLqiqFac43C7uLT4ebVJcvc+6kF/yuEMF2nLpZwgLfoLUMRWzS3j | |||
| # StK8cOeoDaIDpVbguIpLV/KVQpzx8+/u44YfNDy4VprwUyOFKqSCHJPilAcd8uJO | |||
| # +IyhyugTpZFOyBvSj3KVKnFtmxr4HPBT1mfMIv9cHc2ijL0nsnljVkSiUc356aNY | |||
| # Vt2bAkVEL1/02q7UgjJu/KSVE+Traeepoiy+yCsQDmWOmdv1ovoSJgllOJTxeh9K | |||
| # u9HhVujQeJYYXMk1Fl/dkx1Jji2+rTREHO4QFRoAXd01WyHOmMcJ7oUOjE9tDhNO | |||
| # PXwpSJxy0fNsysHscKNXkld9lI2gG0gDWvfPo2cKdKU27S0vF8jmcjcS9G+xPGeC | |||
| # +VKyjTMWZR4Oit0Q3mT0b85G1NMX6XnEBLTT+yzfH4qerAr7EydAreT54al/RrsH | |||
| # YEdlYEBOsELsTu2zdnnYCjQJbRyAMR/iDlTd5aH75UcQrWSY/1AWLny/BSF64pVB | |||
| # J2nDk4+VyY3YmyGuDVyc8KKuhmiDDGotu3ZrAB2WrfIWe/YWgyS5iM9qqEcxL5rc | |||
| # 43E91wB+YkfRzojJuBj6DnKNwaM9rwJAav9pm5biEKgQtDdQCNbDPTCCBgcwggPv | |||
| # oAMCAQICCmEWaDQAAAAAABwwDQYJKoZIhvcNAQEFBQAwXzETMBEGCgmSJomT8ixk | |||
| # ARkWA2NvbTEZMBcGCgmSJomT8ixkARkWCW1pY3Jvc29mdDEtMCsGA1UEAxMkTWlj | |||
| # cm9zb2Z0IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MB4XDTA3MDQwMzEyNTMw | |||
| # OVoXDTIxMDQwMzEzMDMwOVowdzELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hp | |||
| # bmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jw | |||
| # b3JhdGlvbjEhMB8GA1UEAxMYTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBMIIBIjAN | |||
| # BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAn6Fssd/bSJIqfGsuGeG94uPFmVEj | |||
| # UK3O3RhOJA/u0afRTK10MCAR6wfVVJUVSZQbQpKumFwwJtoAa+h7veyJBw/3DgSY | |||
| # 8InMH8szJIed8vRnHCz8e+eIHernTqOhwSNTyo36Rc8J0F6v0LBCBKL5pmyTZ9co | |||
| # 3EZTsIbQ5ShGLieshk9VUgzkAyz7apCQMG6H81kwnfp+1pez6CGXfvjSE/MIt1Nt | |||
| # UrRFkJ9IAEpHZhEnKWaol+TTBoFKovmEpxFHFAmCn4TtVXj+AZodUAiFABAwRu23 | |||
| # 3iNGu8QtVJ+vHnhBMXfMm987g5OhYQK1HQ2x/PebsgHOIktU//kFw8IgCwIDAQAB | |||
| # o4IBqzCCAacwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUIzT42VJGcArtQPt2 | |||
| # +7MrsMM1sw8wCwYDVR0PBAQDAgGGMBAGCSsGAQQBgjcVAQQDAgEAMIGYBgNVHSME | |||
| # gZAwgY2AFA6sgmBAVieX5SUT/CrhClOVWeSkoWOkYTBfMRMwEQYKCZImiZPyLGQB | |||
| # GRYDY29tMRkwFwYKCZImiZPyLGQBGRYJbWljcm9zb2Z0MS0wKwYDVQQDEyRNaWNy | |||
| # b3NvZnQgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHmCEHmtFqFKoKWtTHNY9AcT | |||
| # LmUwUAYDVR0fBEkwRzBFoEOgQYY/aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3Br | |||
| # aS9jcmwvcHJvZHVjdHMvbWljcm9zb2Z0cm9vdGNlcnQuY3JsMFQGCCsGAQUFBwEB | |||
| # BEgwRjBEBggrBgEFBQcwAoY4aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraS9j | |||
| # ZXJ0cy9NaWNyb3NvZnRSb290Q2VydC5jcnQwEwYDVR0lBAwwCgYIKwYBBQUHAwgw | |||
| # DQYJKoZIhvcNAQEFBQADggIBABCXisNcA0Q23em0rXfbznlRTQGxLnRxW20ME6vO | |||
| # vnuPuC7UEqKMbWK4VwLLTiATUJndekDiV7uvWJoc4R0Bhqy7ePKL0Ow7Ae7ivo8K | |||
| # BciNSOLwUxXdT6uS5OeNatWAweaU8gYvhQPpkSokInD79vzkeJkuDfcH4nC8GE6d | |||
| # jmsKcpW4oTmcZy3FUQ7qYlw/FpiLID/iBxoy+cwxSnYxPStyC8jqcD3/hQoT38IK | |||
| # YY7w17gX606Lf8U1K16jv+u8fQtCe9RTciHuMMq7eGVcWwEXChQO0toUmPU8uWZY | |||
| # sy0v5/mFhsxRVuidcJRsrDlM1PZ5v6oYemIp76KbKTQGdxpiyT0ebR+C8AvHLLvP | |||
| # Q7Pl+ex9teOkqHQ1uE7FcSMSJnYLPFKMcVpGQxS8s7OwTWfIn0L/gHkhgJ4VMGbo | |||
| # QhJeGsieIiHQQ+kr6bv0SMws1NgygEwmKkgkX1rqVu+m3pmdyjpvvYEndAYR7nYh | |||
| # v5uCwSdUtrFqPYmhdmG0bqETpr+qR/ASb/2KMmyy/t9RyIwjyWa9nR2HEmQCPS2v | |||
| # WY+45CHltbDKY7R4VAXUQS5QrJSwpXirs6CWdRrZkocTdSIvMqgIbqBbjCW/oO+E | |||
| # yiHW6x5PyZruSeD3AWVviQt9yGnI5m7qp5fOMSn/DsVbXNhNG6HY+i+ePy5VFmvJ | |||
| # E6P9MYIEgTCCBH0CAQEwgYcweTELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hp | |||
| # bmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jw | |||
| # b3JhdGlvbjEjMCEGA1UEAxMaTWljcm9zb2Z0IENvZGUgU2lnbmluZyBQQ0ECCmEZ | |||
| # zJMAAQAAAGYwCQYFKw4DAhoFAKCBrjAZBgkqhkiG9w0BCQMxDAYKKwYBBAGCNwIB | |||
| # BDAcBgorBgEEAYI3AgELMQ4wDAYKKwYBBAGCNwIBFTAjBgkqhkiG9w0BCQQxFgQU | |||
| # 37K+vJ1jnPxK8vpkRCAPo9DnSWcwTgYKKwYBBAGCNwIBDDFAMD6gJIAiAE0AaQBj | |||
| # AHIAbwBzAG8AZgB0ACAAQQBTAFAALgBOAEUAVKEWgBRodHRwOi8vd3d3LmFzcC5u | |||
| # ZXQvIDANBgkqhkiG9w0BAQEFAASCAQAch73cCOyClYPbCbF4q17gXzOFADhQ2A8/ | |||
| # +brHMZd9c5vDdUB7LXjLdNOYtsXXSR5sqjfFmotLgY+w5nQd85/pHjR+/F+cAo/R | |||
| # aralmkgTPQpfN/qdo4tH/zCzgB+ytdVVBkcwm3tMTwCws7yj5daMsOOx3fawGo20 | |||
| # sr/3C3lZpp/vB6tqX4sFPVNxYD48Rhx3VEgu0pfbwqbJJaVw2aJPwN1S+LSh6hpa | |||
| # HxCgm6tzuMY42k/vGZKtvuXOpalK86S8VnJKwEyXtfMZUuybZUAgVRp1zg2/+cjO | |||
| # b9u1WCQ+eMw04zsy1OTpNHjzfGDe0qJPgjz3OOWbeTEEhBQqCb21oYICHTCCAhkG | |||
| # CSqGSIb3DQEJBjGCAgowggIGAgEBMIGFMHcxCzAJBgNVBAYTAlVTMRMwEQYDVQQI | |||
| # EwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3Nv | |||
| # ZnQgQ29ycG9yYXRpb24xITAfBgNVBAMTGE1pY3Jvc29mdCBUaW1lLVN0YW1wIFBD | |||
| # QQIKYQUTNgAAAAAAGjAHBgUrDgMCGqBdMBgGCSqGSIb3DQEJAzELBgkqhkiG9w0B | |||
| # BwEwHAYJKoZIhvcNAQkFMQ8XDTEyMDUyMjE5NDE1M1owIwYJKoZIhvcNAQkEMRYE | |||
| # FJdEhK3IY0sOuO94jDHTXmesWLHdMA0GCSqGSIb3DQEBBQUABIIBAA1fOCfslUgv | |||
| # l9f/HtpuO02C0hSKnBkSGbD2rh9lFY4hL4rpwQksPDLtRcuZzcPtwq48YXbDMg+I | |||
| # Xe2SI6nUGkuk2PScgvYlLQ2PdODyLfI591wMwGfcBxmoU3kXyqyMLccIUBAi8lQV | |||
| # Bb8q5JZc6+YDrb1pDB7LZzIPQ29JZfUi/0jnIel/FPEE9hRirsztkaI8BD5YFTlt | |||
| # JtG4xdcR2qzOvPkhBqnnU19oJZ7359KSUstW3N2ndvOXtBBn/yoxcivbXOZE3190 | |||
| # PHsxuwpbiDIzsrASHJLWtD7ctufmuT+7hrr+6JL39iQB36E9s7ufmZVSIdvJzZkQ | |||
| # gWbUsIzSSbA= | |||
| # SIG # End signature block | |||