Commit 4fe74380 by mahaisong

fix:解决Oracle、数据问题、oracle Developer Tools for VS、各种坑。

改造通过时间累加查询。
parent b90a917c
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
......@@ -2,12 +2,13 @@
<configuration>
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="oracle.manageddataaccess.client" type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.122.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
<section name="oracle.manageddataaccess.client" type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.122.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6" />
</startup>
<appSettings>
<add key="webpages:Version" value="3.0.0.0" />
......@@ -50,7 +51,6 @@
<add name="ESDatabase" connectionString="host=minder;port=9200;defaultIndex=palas_test;requesttimeout=30000" />
<add name="PalasV5Context" connectionString="server=minder;user id=palas;password=lapas;persistsecurityinfo=True;database=Palas_V5;Character Set=utf8" providerName="MySql.Data.MySqlClient" />
<add name="PalasEntityContext" connectionString="server=minder;user id=palas;password=lapas;persistsecurityinfo=True;database=Palas_V5;Character Set=utf8" providerName="MySql.Data.MySqlClient" />
<add name="OracleDbContext" providerName="Oracle.ManagedDataAccess.Client" connectionString="User Id=oracle_user;Password=oracle_user_password;Data Source=oracle" />
</connectionStrings>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
......@@ -59,10 +59,11 @@
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.9.12.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"></provider>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.9.12.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"></provider>
<provider invariantName="Oracle.ManagedDataAccess.Client" type="Oracle.ManagedDataAccess.EntityFramework.EFOracleProviderServices, Oracle.ManagedDataAccess.EntityFramework, Version=6.122.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
<provider invariantName="Oracle.ManagedDataAccess.Client" type="Oracle.ManagedDataAccess.EntityFramework.EFOracleProviderServices, Oracle.ManagedDataAccess.EntityFramework, Version=6.122.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
</providers>
</entityFramework>
<runtime>
......@@ -75,26 +76,23 @@
<assemblyIdentity name="MySql.Data" publicKeyToken="c5687fc88969c44d" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.9.12.0" newVersion="6.9.12.0" />
</dependentAssembly>
<dependentAssembly>
<publisherPolicy apply="no" />
<assemblyIdentity name="Oracle.ManagedDataAccess" publicKeyToken="89b483f429c47342" culture="neutral" />
<bindingRedirect oldVersion="4.121.0.0 - 4.65535.65535.65535" newVersion="4.122.1.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
<oracle.manageddataaccess.client>
<!--<oracle.manageddataaccess.client>
<version number="*">
<dataSources>
<dataSource alias="BEIGE_ORCL" descriptor="(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=140.207.41.22)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORCL))) " />
<dataSource alias="SampleDataSource" descriptor="(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORCL))) " />
</dataSources>
</version>
</oracle.manageddataaccess.client>
<system.data>
</oracle.manageddataaccess.client>-->
<system.data>
<DbProviderFactories>
<remove invariant="MySql.Data.MySqlClient" />
<add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.9.12.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
<remove invariant="Oracle.ManagedDataAccess.Client" />
<add name="ODP.NET, Managed Driver" invariant="Oracle.ManagedDataAccess.Client" description="Oracle Data Provider for .NET, Managed Driver" type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.122.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
<remove invariant="Oracle.ManagedDataAccess.Client"/>
<add name="ODP.NET, Managed Driver" invariant="Oracle.ManagedDataAccess.Client" description="Oracle Data Provider for .NET, Managed Driver"
type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.122.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342"/>
</DbProviderFactories>
</system.data></configuration>
\ No newline at end of file
</system.data>
</configuration>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
......@@ -9,7 +9,7 @@
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>BeigeOracle_ImportLocalES</RootNamespace>
<AssemblyName>BeigeOracle_ImportLocalES</AssemblyName>
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
<TargetFrameworkVersion>v4.6</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<TargetFrameworkProfile />
</PropertyGroup>
......@@ -38,11 +38,11 @@
<Private>True</Private>
</Reference>
<Reference Include="EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
<HintPath>..\packages\EntityFramework.6.0.0\lib\net45\EntityFramework.dll</HintPath>
<HintPath>..\packages\EntityFramework.6.1.3\lib\net45\EntityFramework.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
<HintPath>..\packages\EntityFramework.6.0.0\lib\net45\EntityFramework.SqlServer.dll</HintPath>
<HintPath>..\packages\EntityFramework.6.1.3\lib\net45\EntityFramework.SqlServer.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="HooLab.Log">
......@@ -65,12 +65,12 @@
<Private>True</Private>
</Reference>
<Reference Include="Oracle.ManagedDataAccess, Version=4.122.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=MSIL">
<HintPath>..\packages\Oracle.ManagedDataAccess.12.2.1100\lib\net40\Oracle.ManagedDataAccess.dll</HintPath>
<Private>True</Private>
<SpecificVersion>False</SpecificVersion>
<HintPath>..\include\Oracle.ManagedDataAccess.dll</HintPath>
</Reference>
<Reference Include="Oracle.ManagedDataAccess.EntityFramework, Version=6.122.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=MSIL">
<HintPath>..\packages\Oracle.ManagedDataAccess.EntityFramework.12.2.1100\lib\net45\Oracle.ManagedDataAccess.EntityFramework.dll</HintPath>
<Private>True</Private>
<SpecificVersion>False</SpecificVersion>
<HintPath>..\include\Oracle.ManagedDataAccess.EntityFramework.dll</HintPath>
</Reference>
<Reference Include="Palas.Protocol">
<HintPath>..\include\Palas.Protocol.dll</HintPath>
......@@ -133,7 +133,9 @@
</Compile>
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
<None Include="App.config">
<SubType>Designer</SubType>
</None>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\HJBeigeModel\HJBeigeModel.csproj">
......@@ -145,6 +147,9 @@
<Name>HTCommon</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<Content Include="说明.txt" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
......
namespace BeigeOracle_ImportLocalES
namespace BeigeOracle_ImportLocalES
......@@ -35,13 +35,18 @@
this.label3 = new System.Windows.Forms.Label();
this.textBox_END = new System.Windows.Forms.TextBox();
this.listBox1 = new System.Windows.Forms.ListBox();
this.button_next = new System.Windows.Forms.Button();
this.label4 = new System.Windows.Forms.Label();
this.textBox_Count = new System.Windows.Forms.TextBox();
this.label5 = new System.Windows.Forms.Label();
this.label6 = new System.Windows.Forms.Label();
this.SuspendLayout();
//
// button1
//
this.button1.Location = new System.Drawing.Point(209, 132);
this.button1.Location = new System.Drawing.Point(224, 155);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(75, 23);
this.button1.Size = new System.Drawing.Size(161, 35);
this.button1.TabIndex = 0;
this.button1.Text = "开始执行";
this.button1.UseVisualStyleBackColor = true;
......@@ -49,16 +54,16 @@
//
// textBox_DT
//
this.textBox_DT.Location = new System.Drawing.Point(273, 55);
this.textBox_DT.Location = new System.Drawing.Point(224, 55);
this.textBox_DT.Name = "textBox_DT";
this.textBox_DT.Size = new System.Drawing.Size(197, 20);
this.textBox_DT.Size = new System.Drawing.Size(161, 20);
this.textBox_DT.TabIndex = 1;
this.textBox_DT.Text = "2012-01-01";
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(32, 58);
this.label1.Location = new System.Drawing.Point(7, 58);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(217, 13);
this.label1.TabIndex = 2;
......@@ -77,7 +82,7 @@
// label3
//
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(32, 87);
this.label3.Location = new System.Drawing.Point(7, 94);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(217, 13);
this.label3.TabIndex = 4;
......@@ -85,27 +90,76 @@
//
// textBox_END
//
this.textBox_END.Location = new System.Drawing.Point(273, 87);
this.textBox_END.Location = new System.Drawing.Point(224, 91);
this.textBox_END.Name = "textBox_END";
this.textBox_END.Size = new System.Drawing.Size(197, 20);
this.textBox_END.Size = new System.Drawing.Size(161, 20);
this.textBox_END.TabIndex = 5;
this.textBox_END.Text = "2018-05-24";
//
// listBox1
//
this.listBox1.FormattingEnabled = true;
this.listBox1.Location = new System.Drawing.Point(35, 191);
this.listBox1.Location = new System.Drawing.Point(35, 217);
this.listBox1.Name = "listBox1";
this.listBox1.ScrollAlwaysVisible = true;
this.listBox1.Size = new System.Drawing.Size(457, 264);
this.listBox1.Size = new System.Drawing.Size(564, 238);
this.listBox1.TabIndex = 6;
this.listBox1.SelectedIndexChanged += new System.EventHandler(this.listBox1_SelectedIndexChanged);
//
// button_next
//
this.button_next.Location = new System.Drawing.Point(400, 46);
this.button_next.Name = "button_next";
this.button_next.Size = new System.Drawing.Size(175, 36);
this.button_next.TabIndex = 7;
this.button_next.Text = "接着上次";
this.button_next.UseVisualStyleBackColor = true;
this.button_next.Click += new System.EventHandler(this.button_next_Click);
//
// label4
//
this.label4.AutoSize = true;
this.label4.Location = new System.Drawing.Point(35, 462);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(471, 13);
this.label4.TabIndex = 8;
this.label4.Text = "注意:此程序,只允许执行1个客户端。不允许多个同时操作。将导致数据重复插入ES。";
//
// textBox_Count
//
this.textBox_Count.Location = new System.Drawing.Point(224, 129);
this.textBox_Count.Name = "textBox_Count";
this.textBox_Count.Size = new System.Drawing.Size(100, 20);
this.textBox_Count.TabIndex = 9;
this.textBox_Count.Text = "500";
//
// label5
//
this.label5.AutoSize = true;
this.label5.Location = new System.Drawing.Point(7, 132);
this.label5.Name = "label5";
this.label5.Size = new System.Drawing.Size(151, 13);
this.label5.TabIndex = 10;
this.label5.Text = "查询数据库一次最大多少条";
//
// label6
//
this.label6.AutoSize = true;
this.label6.Location = new System.Drawing.Point(35, 191);
this.label6.Name = "label6";
this.label6.Size = new System.Drawing.Size(0, 13);
this.label6.TabIndex = 11;
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(547, 470);
this.ClientSize = new System.Drawing.Size(630, 481);
this.Controls.Add(this.label6);
this.Controls.Add(this.label5);
this.Controls.Add(this.textBox_Count);
this.Controls.Add(this.label4);
this.Controls.Add(this.button_next);
this.Controls.Add(this.listBox1);
this.Controls.Add(this.textBox_END);
this.Controls.Add(this.label3);
......@@ -129,6 +183,11 @@
private System.Windows.Forms.Label label3;
private System.Windows.Forms.TextBox textBox_END;
private System.Windows.Forms.ListBox listBox1;
private System.Windows.Forms.Button button_next;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.TextBox textBox_Count;
private System.Windows.Forms.Label label5;
private System.Windows.Forms.Label label6;
}
}


......@@ -4,6 +4,7 @@ using HooLab.Log;
using HTCommon.Data;
using HTCommon.DataAccess;
using HTCommon.Helper;
using Oracle.ManagedDataAccess.Client;
using Palas.Protocol;
using PalasEntityModel;
using System;
......@@ -11,6 +12,7 @@ using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.Entity.Migrations;
using System.Diagnostics;
using System.Drawing;
using System.Globalization;
using System.Linq;
......@@ -24,30 +26,84 @@ namespace BeigeOracle_ImportLocalES
public partial class Form1 : Form
{
private static string sync_name = "HuaJinNews_Beige";
private static int batchCount = 500;
public Form1()
{
InitializeComponent();
#region 测试ado 调用oracle的写法
//try
//{
// string connString = "Data Source=BEIGE_ORCL;User Id=bigdata_admin;Password=bigdata_admin";
// OracleConnection conn = new OracleConnection();
// conn.ConnectionString = connString;
// conn.Open();
// OracleCommand cmd = conn.CreateCommand();
// cmd.CommandText = "select * from TXT_NWS_BAS where rownum=1";
// cmd.CommandType = CommandType.Text;
// //也会ONS未配置,但是会得到值。
// OracleDataReader odr = cmd.ExecuteReader();
// odr.Read();
// object o = odr.GetValue(0);
// Console.WriteLine("Connection State:" + conn.State);
// conn.Close();
// Console.ReadLine();
//}
//catch (Exception ex)
//{
// throw;
//}
#endregion
this.listBox1.Text = "";
this.listBox1.HorizontalScrollbar = true;
}
this.button_next.Enabled = false;
this.button_next.Visible = false;
//首先判断上次抓取的编号
SyncOffset _syncState = null;
//没有,则创建新的
using (PalasEntityContext palasEntityContext = new PalasEntityContext())
{
_syncState = palasEntityContext.SyncOffset.Where(f => f.source_name == sync_name).FirstOrDefault();
}
if (_syncState != null && null != _syncState.last_pubdate)
{
this.button_next.Text = "上次:" + ((DateTime)_syncState.last_pubdate).ToString("yyyy-MM-dd HH:mm:ss.fff");
this.button_next.Enabled = true;
this.button_next.Visible = true;
DateTime Where_BeginTime = DateTime.Parse("2012-01-01");
DateTime Where_ENDTime = DateTime.Parse("2018-05-24");
this.listBox1.Items.Add("发布时间上次已经执行到了:" + ((DateTime)_syncState.last_pubdate).ToString("yyyy-MM-dd HH:mm:ss.fff"));
}
}
//首先判断上次抓取的进度(时间)
static SyncOffset _syncState = null;
static DateTime Where_BeginTime = DateTime.Parse("2012-01-01");
static DateTime Where_ENDTime = DateTime.Parse("2018-05-24");
static Int32 Query_Count = 0;
private void button1_Click(object sender, EventArgs e)
{
Where_BeginTime = DateTime.Parse("2012-01-01");
Where_ENDTime = DateTime.Parse("2018-05-24");
this.listBox1.Items.Clear();
this.button1.Enabled = false;
this.button1.Visible = false;
this.listBox1.Items.Add("正在执行中……");
if (String.IsNullOrWhiteSpace(this.textBox_DT.Text) || String.IsNullOrWhiteSpace(this.textBox_END.Text))
{
......@@ -55,12 +111,46 @@ namespace BeigeOracle_ImportLocalES
}
else
{
if (DateTime.TryParse(this.textBox_DT.Text, out Where_BeginTime) || DateTime.TryParse(this.textBox_END.Text, out Where_BeginTime))
if (DateTime.TryParse(this.textBox_DT.Text, out Where_BeginTime) && DateTime.TryParse(this.textBox_END.Text, out Where_ENDTime))
{
//查询oracle,得到最小的1条id
if (Where_BeginTime >= Where_ENDTime)
{
MessageBox.Show("开始时间必须小于结束时间");
return;
}
else
{
//没有,则创建新的
using (PalasEntityContext palasEntityContext = new PalasEntityContext())
{
_syncState = palasEntityContext.SyncOffset.Where(f => f.source_name == sync_name).FirstOrDefault();
}
if (null != _syncState && null != _syncState.last_pubdate)
{
this.listBox1.Items.Add("发布时间上次已经执行到了:" + ((DateTime)_syncState.last_pubdate).ToString("yyyy-MM-dd HH:mm:ss.fff"));
if ((DateTime)_syncState.last_pubdate >= Where_BeginTime)
{
MessageBox.Show("本次开始时间必须大于上次已经处理过的时间");
return;
}
int tm = (int)(Where_BeginTime - (DateTime)_syncState.last_pubdate).TotalMinutes;
ThreadPool.QueueUserWorkItem(state => run(), null);
MessageBox.Show("请注意:“本次开始时间”与“上次处理时间”间隔为" + (tm / 60) + "小时" + (tm % 60) + "分钟,请补充计算!例如:通过本程序,选择间隔日期的开始结束时间导入。");
}
if ((!Int32.TryParse(this.textBox_Count.Text, out Query_Count)) || Query_Count <= 0)
{
MessageBox.Show("查询数据库一次条数必须是大于0的数字!");
return;
}
//查询oracle
ThreadPool.QueueUserWorkItem(state => run(), null);
}
}
else
......@@ -72,227 +162,277 @@ namespace BeigeOracle_ImportLocalES
}
/// <summary>
/// 本次启动时的位置
/// </summary>
/// <param name="_syncState"></param>
void run()
{
DateTime startStockKeepTime = DateTime.Now;
try
{
//首先判断上次抓取的编号
SyncOffset _syncState = null;
//没有,则创建新的
using (PalasEntityContext palasEntityContext = new PalasEntityContext())
this.Invoke(new MethodInvoker(() =>
{
_syncState = palasEntityContext.SyncOffset.Where(f => f.source_name == sync_name).FirstOrDefault();
}
this.button1.Enabled = false;
this.button1.Visible = false;
this.listBox1.Items.Add("正在执行中……");
}));
if (_syncState == null)
{
//当为空时,创建一下
_syncState = new SyncOffset();
_syncState.create_date = DateTime.Now;
//当为空时,取时间范围内最小的ID号作为 last_itemid。 也就是下一次执行的起始位置。可以从0开始。
using (HJBeigeContext TXT_NWS_BASContext = new HJBeigeContext())
{
try
{
}
TXT_NWS_BAS tnb = TXT_NWS_BASContext.TXT_NWS_BAS.Where(x => x.PUB_DT >= Where_BeginTime).OrderBy(a => a.ID).FirstOrDefault();
if (null != tnb && tnb.ID >= 0)
{
_syncState.last_itemid = tnb.ID.ToString();
//逻辑描述
//查询 开始时间到 当天23点59分59秒.999。
//——————根据时间正序,
//——————取前Query_Count条
//如果条数==Query_Count,则拿最后1条的时间 到 当天23点59分59秒.999。 继续查。
}
}
catch (Exception)
{
}
}
}
//开始执行时间
DateTime startStockKeepTime = DateTime.Now;
Console.WriteLine("{0} Reading oracle hj beige news...", startStockKeepTime);
//直到条数小于Query_Count为止。
//执行下一天的数据查询。
do
{
try
{
int indexCount = 0;
List<BeigeNews> BeigeNewsList = null;
using (HJBeigeContext hjBeigeContext = new HJBeigeContext())
{
//得到上次最后1个itemid
DateTime? TodayQueryTime = Where_BeginTime;
long lastId = 0;
if (_syncState != null && !string.IsNullOrWhiteSpace(_syncState.last_itemid))
{
long.TryParse(_syncState.last_itemid, out lastId);
}
//(接着上次的继续计算)从 Oracle 中抽取 TXT_NWS_BAS 的数据。
//TXT_NWS_BAS 的ID主键是自增INT型,所以可以顺序抽取
//TXT_NWS_BAS.ID 是TXT_NWS_BAS_TXT.ORIG_ID , 但是也可能没有ORIG_ID。
//注意:此表这样查询超级慢
BeigeNewsList = hjBeigeContext.TXT_NWS_BAS.Join(
hjBeigeContext.TXT_NWS_BAS_TXT, s => s.ID, z => z.ORIG_ID,
(s, z) =>
new
{
ID = s.ID,
MED_NAME = s.MED_NAME,
PUB_TIME = s.PUB_TIME,
AUT = s.AUT,
TIT = s.TIT,
LNK_ADDR = s.LNK_ADDR,
CONT_FMT = z.CONT_FMT,
CONT = z.CONT,
PUB_DATE = s.PUB_DT
}
)
.Where(f => f.ID > lastId && f.PUB_DATE <= Where_ENDTime)//接着上次继续计算
.OrderBy(f => f.ID).Take(batchCount)//一次500条
.ToList()
.Select(f => new BeigeNews
{
ID = f.ID,
MED_NAME = f.MED_NAME,
PUB_TIME = f.PUB_TIME ?? f.PUB_DATE,
AUT = f.AUT,
TIT = f.TIT,
LNK_ADDR = f.LNK_ADDR,
CONT_FMT = f.CONT_FMT,
CONT = f.CONT
}).ToList();
}
DateTime TodayQueryDate = DateTime.Parse(Where_BeginTime.ToString("yyyy-MM-dd"));
_syncState.source_name = sync_name;
_syncState.modify_date = DateTime.Now;
_syncState.memo = "贝格新闻数据同步";
DateTime TodayEndTime = DateTime.Parse(Where_BeginTime.ToString("yyyy-MM-dd") + " 23:59:59.999");
if (BeigeNewsList != null && BeigeNewsList.Count > 0)
{
//数据转存
indexCount = BeigeNewsList.Count;
while (TodayEndTime <= Where_ENDTime.AddDays(1))
{
if (TodayEndTime > Where_ENDTime)
{
TodayEndTime = Where_ENDTime;
}
//最后1条记录 的ID和发布时间 更新到进度表
_syncState.last_itemid = BeigeNewsList.LastOrDefault().ID.ToString();
_syncState.last_pubdate = BeigeNewsList.LastOrDefault().PUB_TIME;
//每天的时间范围。
DateTime beginTime;
if (null != TodayQueryTime)
{
beginTime = (DateTime)TodayQueryTime;
TodayQueryTime = null;
}
else
{
beginTime = TodayQueryDate;
}
//动态分区: 继承自OrderablePartitioner类, 在AsParallel 时会将数据拆分(按照自定义分区规则)
OrderableListPartitioner<BeigeNews> beigeNews = new OrderableListPartitioner<BeigeNews>(BeigeNewsList);
int tryCount = 0;
long todayID = 0;//按照同一时间、按照ID号排序,则查询时也要注意大于上次的ID号。
// Use with PLINQ
beigeNews.AsParallel().ForAll(newItem =>
{
//改写成Item
//goto
TagToday:
List<BeigeNews> BeigeNewsList = null;
Item item = new Item();
//将数据构造为ITEM。
try
{
#region 测试--VS的调试器报错
//万分注意:当VS的调试器报错的时候,并不代表真的错误。可以一定程度忽略,,因为VS的调试器报错,试了很多种方法,耽误时间。
//在ONS报错的情况下,测试能获取到值
//using (HJBeigeContext hjBeigeContext = new HJBeigeContext())
//{
// TXT_NWS_BAS t= hjBeigeContext.TXT_NWS_BAS.First();
//}
//取1条需要10秒。大量内部事件的报错信息,忽略。
//取500条需要36秒。大量内部VS的调试器事件的报错信息,并不代表真的错误。可以一定程度忽略
//using (HJBeigeContext hjBeigeContext = new HJBeigeContext())
//{
// BeigeNewsList = hjBeigeContext.TXT_NWS_BAS.Join(hjBeigeContext.TXT_NWS_BAS_TXT, s => s.ID, z => z.ORIG_ID,
// (s, z) => new
// {
// ID = s.ID,
// CONT_FMT = z.CONT_FMT,
// PUB_DATE = s.PUB_DT
// }
// ).Where(f => f.PUB_DATE > beginTime).Take(500).ToList()
// .Select(f => new BeigeNews
// {
// ID = f.ID,
// PUB_TIME = f.PUB_DATE
// }).ToList();
//}
#endregion
//原程序是内联,又坑了我一把。改写为linq。速度也提升不少。
using (HJBeigeContext hjBeigeContext = new HJBeigeContext())
{
var data = from o in hjBeigeContext.TXT_NWS_BAS
join d in hjBeigeContext.TXT_NWS_BAS_TXT
on o.ID equals d.ORIG_ID into dc
from dci in dc.DefaultIfEmpty()
where o.PUB_DT >= beginTime && o.PUB_DT <= TodayEndTime && o.ID > todayID
orderby o.PUB_DT, o.ID
select new BeigeNews
{
ID = o.ID,
MED_NAME = o.MED_NAME,
PUB_TIME = o.PUB_DT,
AUT = o.AUT,
TIT = o.TIT,
LNK_ADDR = o.LNK_ADDR,
CONT_FMT = dci.CONT_FMT,
CONT = dci.CONT
};
BeigeNewsList = data.ToList().Take(Query_Count).ToList();
}
}
catch (Exception ex)
{
if (tryCount < 3)
{
tryCount = tryCount + 1;
goto TagToday;
item.Crawler = "Oracle_Beige_NEWS";
item.CrawlID = "Oracle_Beige_NEWS";
}
//失败--重试3次
Logger.Error(TodayQueryDate.ToString() + "日期查询数据库时重试三次依然错误,无法连接或异常,请检查!" + ex.ToString());
}
item.AuthorName = newItem.AUT;
item.CleanTitle = newItem.TIT;
item.ClientItemID = newItem.ID.ToString();
item.MediaName = newItem.MED_NAME;
item.PubDate = newItem.PUB_TIME;
item.Url = newItem.LNK_ADDR;
item.HTMLText = newItem.CONT;
item.FetchTime = newItem.PUB_TIME;
item.CleanText = HTMLCleaner.CleanHTML(newItem.CONT, true);
item.ItemID = MD5Helper.getMd5Hash(item.Crawler + item.ClientItemID);
//处理
_syncState.source_name = sync_name;
_syncState.modify_date = DateTime.Now;
_syncState.memo = "贝格新闻数据同步";
if (BeigeNewsList != null && BeigeNewsList.Count > 0)
{
//数据转存
//最后1条记录 的ID和发布时间 更新到进度表
_syncState.last_itemid = BeigeNewsList.LastOrDefault().ID.ToString();
_syncState.last_pubdate = BeigeNewsList.LastOrDefault().PUB_TIME;
//动态分区: 继承自OrderablePartitioner类, 在AsParallel 时会将数据拆分(按照自定义分区规则)
OrderableListPartitioner<BeigeNews> beigeNews = new OrderableListPartitioner<BeigeNews>(BeigeNewsList);
//将这个Item加入到ES数据库中
try
// Use with PLINQ
beigeNews.AsParallel().ForAll(newItem =>
{
//改写成Item
Item item = new Item();
//将数据构造为ITEM。
item.Crawler = "Oracle_Beige_NEWS";
item.CrawlID = "Oracle_Beige_NEWS";
item.AuthorName = newItem.AUT;
item.CleanTitle = newItem.TIT;
item.ClientItemID = newItem.ID.ToString();
item.MediaName = newItem.MED_NAME;
item.PubDate = newItem.PUB_TIME;
item.Url = newItem.LNK_ADDR;
item.HTMLText = newItem.CONT;
item.FetchTime = newItem.PUB_TIME;
item.CleanText = HTMLCleaner.CleanHTML(newItem.CONT, true);
item.ItemID = MD5Helper.getMd5Hash(item.Crawler + item.ClientItemID);
//将这个Item加入到ES数据库中
try
{
int retrytime = 0;
do
{
int retrytime = 0;
do
retrytime++;
try
{
retrytime++;
try
{
ESAccess.Index(item, 0);
Console.WriteLine("Finish import {0}.", item.ItemID);
break;
}
catch (Exception ex)
{
Logger.Error("Import to redis mq error! " + ex.ToString());
}
}
while (retrytime < 20);
ESAccess.Index(item, 0);
break;
}
catch (Exception ex)
{
Logger.Error("Import to redis mq error! " + ex.ToString());
}
}
catch (Exception ext)
{
String msg = String.Format(CultureInfo.InvariantCulture,
"Failed to persist item. ItemID {0}, Exception {1}",
item.ItemID, ext.ToString());
Logger.Error(msg);
}
});
while (retrytime < 20);
if (_syncState != null)
}
catch (Exception ext)
{
using (PalasEntityContext htItemContext = new PalasEntityContext())
{
htItemContext.SyncOffset.AddOrUpdate(_syncState);
htItemContext.SaveChanges();
}
String msg = String.Format(CultureInfo.InvariantCulture,
"Failed to persist item. ItemID {0}, Exception {1}",
item.ItemID, ext.ToString());
Logger.Error(msg);
}
});
string msg = string.Format("Success sync hj beige news at {0}, this time index {1} items.", DateTime.Now, indexCount);
Logger.Info(msg);
Console.WriteLine(msg);
if (_syncState != null)
{
using (PalasEntityContext htItemContext = new PalasEntityContext())
{
htItemContext.SyncOffset.AddOrUpdate(_syncState);
htItemContext.SaveChanges();
}
string msg = string.Format("Success sync hj beige news at {0}, this time index {1} items.", DateTime.Now, BeigeNewsList.Count);
Logger.Info(msg);
}
else
}
if (null != BeigeNewsList)
{
this.Invoke(new MethodInvoker(() =>
{
if (_syncState != null)
try
{
using (PalasEntityContext htItemContext = new PalasEntityContext())
{
htItemContext.SyncOffset.AddOrUpdate(_syncState);
htItemContext.SaveChanges();
}
string msg = string.Format("Success sync hj beige news at {0}, this time index 0 items.", DateTime.Now);
Logger.Info(msg);
Console.WriteLine(msg);
this.listBox1.Items.Add("时间:"+DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + " 数据日期:"+TodayQueryDate.ToString("yyyy-MM-dd") + "插入ES" + BeigeNewsList.Count + "条;");
}
break;
}
catch { }
}));
}
catch (Exception ex)
if (null != BeigeNewsList && BeigeNewsList.Count == Query_Count)
{
Logger.Error(ex.ToString());
}
//认为当天内还有其他记录,需继续执行。
todayID = long.Parse(BeigeNewsList.LastOrDefault().ID.ToString());
//又一个坑,数据中存在大量统一0点0分插入的数据。此类数据要注意ID号。
beginTime = BeigeNewsList.LastOrDefault().PUB_TIME;
goto TagToday;
this.Invoke(new MethodInvoker(() =>
}
if (null == BeigeNewsList || 0 == BeigeNewsList.Count)
{
try
_syncState.last_pubdate = TodayEndTime;
if (_syncState != null)
{
this.listBox1.Items.Add(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "插入ES500条; 当前进度:ID为" + _syncState.last_itemid + ";发布时间为:" + ((DateTime)_syncState.last_pubdate).ToString("yyyy-MM-dd HH:mm:ss.fff"));
using (PalasEntityContext htItemContext = new PalasEntityContext())
{
htItemContext.SyncOffset.AddOrUpdate(_syncState);
htItemContext.SaveChanges();
}
string msg = string.Format("Success sync hj beige news at {0}, this time index {1} items.", DateTime.Now, BeigeNewsList.Count);
Logger.Info(msg);
}
catch { }
}));
}
//当天执行完,执行下一天。
TodayQueryDate = TodayQueryDate.AddDays(1);
TodayEndTime = TodayEndTime.AddDays(1);
}
while (true);
//结束时间或完成时间
Console.WriteLine("{0} Finish sync oracle hj beige news. Cost {1} Seconds.", DateTime.Now, (DateTime.Now - startStockKeepTime).TotalSeconds);
}
catch (Exception ex)
{
......@@ -303,11 +443,32 @@ namespace BeigeOracle_ImportLocalES
this.Invoke(new MethodInvoker(() =>
{
this.listBox1.Items.Add("执行完成");
int tm = (int)(DateTime.Now - startStockKeepTime).TotalMinutes;
this.listBox1.Items.Add("执行完成;开始时间:" + startStockKeepTime.ToString("yyyy-MM-dd HH:mm:ss.fff") + "结束时间:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ",共用" + (tm / 60) + "小时" + (tm % 60) + "分钟");
this.button1.Enabled = true;
this.button1.Visible = true;
//首先判断上次抓取的编号
SyncOffset _syncState1 = null;
//没有,则创建新的
using (PalasEntityContext palasEntityContext = new PalasEntityContext())
{
_syncState1 = palasEntityContext.SyncOffset.Where(f => f.source_name == sync_name).FirstOrDefault();
}
if (_syncState1 != null && null != _syncState1.last_pubdate)
{
this.button_next.Text = "上次:" + ((DateTime)_syncState1.last_pubdate).ToString("yyyy-MM-dd HH:mm:ss.fff");
this.button_next.Enabled = true;
this.button_next.Visible = true;
this.listBox1.Items.Add("发布时间本次已经执行到了:" + ((DateTime)_syncState1.last_pubdate).ToString("yyyy-MM-dd HH:mm:ss.fff"));
}
}));
......@@ -322,5 +483,14 @@ namespace BeigeOracle_ImportLocalES
MessageBox.Show(ls.Text);
}
private void button_next_Click(object sender, EventArgs e)
{
this.textBox_DT.Text = this.button_next.Text.Substring(this.button_next.Text.IndexOf(':') + 1);
this.button_next.Enabled = false;
this.button_next.Visible = false;
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
......@@ -2,12 +2,13 @@
<configuration>
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="oracle.manageddataaccess.client" type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.122.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
<section name="oracle.manageddataaccess.client" type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.122.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6" />
</startup>
<appSettings>
<add key="webpages:Version" value="3.0.0.0" />
......@@ -50,7 +51,6 @@
<add name="ESDatabase" connectionString="host=minder;port=9200;defaultIndex=palas_test;requesttimeout=30000" />
<add name="PalasV5Context" connectionString="server=minder;user id=palas;password=lapas;persistsecurityinfo=True;database=Palas_V5;Character Set=utf8" providerName="MySql.Data.MySqlClient" />
<add name="PalasEntityContext" connectionString="server=minder;user id=palas;password=lapas;persistsecurityinfo=True;database=Palas_V5;Character Set=utf8" providerName="MySql.Data.MySqlClient" />
<add name="OracleDbContext" providerName="Oracle.ManagedDataAccess.Client" connectionString="User Id=oracle_user;Password=oracle_user_password;Data Source=oracle" />
</connectionStrings>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
......@@ -59,10 +59,11 @@
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.9.12.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"></provider>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.9.12.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"></provider>
<provider invariantName="Oracle.ManagedDataAccess.Client" type="Oracle.ManagedDataAccess.EntityFramework.EFOracleProviderServices, Oracle.ManagedDataAccess.EntityFramework, Version=6.122.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
<provider invariantName="Oracle.ManagedDataAccess.Client" type="Oracle.ManagedDataAccess.EntityFramework.EFOracleProviderServices, Oracle.ManagedDataAccess.EntityFramework, Version=6.122.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
</providers>
</entityFramework>
<runtime>
......@@ -75,26 +76,23 @@
<assemblyIdentity name="MySql.Data" publicKeyToken="c5687fc88969c44d" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.9.12.0" newVersion="6.9.12.0" />
</dependentAssembly>
<dependentAssembly>
<publisherPolicy apply="no" />
<assemblyIdentity name="Oracle.ManagedDataAccess" publicKeyToken="89b483f429c47342" culture="neutral" />
<bindingRedirect oldVersion="4.121.0.0 - 4.65535.65535.65535" newVersion="4.122.1.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
<oracle.manageddataaccess.client>
<!--<oracle.manageddataaccess.client>
<version number="*">
<dataSources>
<dataSource alias="BEIGE_ORCL" descriptor="(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=140.207.41.22)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORCL))) " />
<dataSource alias="SampleDataSource" descriptor="(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORCL))) " />
<dataSource alias="BEIGE_ORCLDB" descriptor="(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=140.207.41.22)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORCL))) " />
</dataSources>
</version>
</oracle.manageddataaccess.client>
<system.data>
</oracle.manageddataaccess.client>-->
<system.data>
<DbProviderFactories>
<remove invariant="MySql.Data.MySqlClient" />
<add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.9.12.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
<remove invariant="Oracle.ManagedDataAccess.Client" />
<add name="ODP.NET, Managed Driver" invariant="Oracle.ManagedDataAccess.Client" description="Oracle Data Provider for .NET, Managed Driver" type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.122.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
<remove invariant="Oracle.ManagedDataAccess.Client"/>
<add name="ODP.NET, Managed Driver" invariant="Oracle.ManagedDataAccess.Client" description="Oracle Data Provider for .NET, Managed Driver"
type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.122.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342"/>
</DbProviderFactories>
</system.data></configuration>
\ No newline at end of file
</system.data>
</configuration>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
......@@ -2,12 +2,13 @@
<configuration>
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="oracle.manageddataaccess.client" type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.122.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
<section name="oracle.manageddataaccess.client" type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.122.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6" />
</startup>
<appSettings>
<add key="webpages:Version" value="3.0.0.0" />
......@@ -50,7 +51,6 @@
<add name="ESDatabase" connectionString="host=minder;port=9200;defaultIndex=palas_test;requesttimeout=30000" />
<add name="PalasV5Context" connectionString="server=minder;user id=palas;password=lapas;persistsecurityinfo=True;database=Palas_V5;Character Set=utf8" providerName="MySql.Data.MySqlClient" />
<add name="PalasEntityContext" connectionString="server=minder;user id=palas;password=lapas;persistsecurityinfo=True;database=Palas_V5;Character Set=utf8" providerName="MySql.Data.MySqlClient" />
<add name="OracleDbContext" providerName="Oracle.ManagedDataAccess.Client" connectionString="User Id=oracle_user;Password=oracle_user_password;Data Source=oracle" />
</connectionStrings>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
......@@ -59,10 +59,11 @@
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.9.12.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"></provider>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.9.12.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"></provider>
<provider invariantName="Oracle.ManagedDataAccess.Client" type="Oracle.ManagedDataAccess.EntityFramework.EFOracleProviderServices, Oracle.ManagedDataAccess.EntityFramework, Version=6.122.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
<provider invariantName="Oracle.ManagedDataAccess.Client" type="Oracle.ManagedDataAccess.EntityFramework.EFOracleProviderServices, Oracle.ManagedDataAccess.EntityFramework, Version=6.122.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
</providers>
</entityFramework>
<runtime>
......@@ -75,26 +76,23 @@
<assemblyIdentity name="MySql.Data" publicKeyToken="c5687fc88969c44d" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.9.12.0" newVersion="6.9.12.0" />
</dependentAssembly>
<dependentAssembly>
<publisherPolicy apply="no" />
<assemblyIdentity name="Oracle.ManagedDataAccess" publicKeyToken="89b483f429c47342" culture="neutral" />
<bindingRedirect oldVersion="4.121.0.0 - 4.65535.65535.65535" newVersion="4.122.1.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
<oracle.manageddataaccess.client>
<!--<oracle.manageddataaccess.client>
<version number="*">
<dataSources>
<dataSource alias="BEIGE_ORCL" descriptor="(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=140.207.41.22)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORCL))) " />
<dataSource alias="SampleDataSource" descriptor="(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORCL))) " />
<dataSource alias="BEIGE_ORCLDB" descriptor="(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=140.207.41.22)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORCL))) " />
</dataSources>
</version>
</oracle.manageddataaccess.client>
<system.data>
</oracle.manageddataaccess.client>-->
<system.data>
<DbProviderFactories>
<remove invariant="MySql.Data.MySqlClient" />
<add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.9.12.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
<remove invariant="Oracle.ManagedDataAccess.Client" />
<add name="ODP.NET, Managed Driver" invariant="Oracle.ManagedDataAccess.Client" description="Oracle Data Provider for .NET, Managed Driver" type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.122.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
<remove invariant="Oracle.ManagedDataAccess.Client"/>
<add name="ODP.NET, Managed Driver" invariant="Oracle.ManagedDataAccess.Client" description="Oracle Data Provider for .NET, Managed Driver"
type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.122.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342"/>
</DbProviderFactories>
</system.data></configuration>
\ No newline at end of file
</system.data>
</configuration>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:simpleType name="parameterDirection">
<xs:restriction base="xs:string">
<xs:enumeration value="Output"/>
<xs:enumeration value="InputOutput"/>
<xs:enumeration value="ReturnValue"/>
<xs:enumeration value="Implicit"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="customBoolean">
<xs:restriction base="xs:string">
<xs:enumeration value="true"/>
<xs:enumeration value="false"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="ONSParameters">
<xs:restriction base="xs:string">
<xs:enumeration value="nodeList"/>
<!--<xs:enumeration value="walletFile"/>
<xs:enumeration value="walletPassword"/>-->
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="ONSModeValues">
<xs:restriction base="xs:string">
<xs:enumeration value="local"/>
<xs:enumeration value="remote"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="datatype">
<xs:restriction base="xs:string">
<xs:enumeration value="System.Binary"/>
<xs:enumeration value="System.Boolean"/>
<xs:enumeration value="System.Byte"/>
<xs:enumeration value="System.Byte[]"/>
<xs:enumeration value="System.Char"/>
<xs:enumeration value="System.DateTime"/>
<xs:enumeration value="System.DateTimeOffset"/>
<xs:enumeration value="System.Decimal"/>
<xs:enumeration value="System.Double"/>
<xs:enumeration value="System.Guid"/>
<xs:enumeration value="System.Int16"/>
<xs:enumeration value="System.Int32"/>
<xs:enumeration value="System.Int64"/>
<xs:enumeration value="System.SByte"/>
<xs:enumeration value="System.Single"/>
<xs:enumeration value="System.String"/>
<xs:enumeration value="System.TimeSpan"/>
<xs:enumeration value="System.UInt16"/>
<xs:enumeration value="System.UInt32"/>
<xs:enumeration value="System.UInt64"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="providerType">
<xs:restriction base="xs:string">
<xs:enumeration value="BFile"/>
<xs:enumeration value="BinaryFloat"/>
<xs:enumeration value="BinaryDouble"/>
<xs:enumeration value="Blob"/>
<xs:enumeration value="Byte"/>
<xs:enumeration value="Char"/>
<xs:enumeration value="Clob"/>
<xs:enumeration value="Date"/>
<xs:enumeration value="Decimal"/>
<xs:enumeration value="Double"/>
<xs:enumeration value="Int16"/>
<xs:enumeration value="Int32"/>
<xs:enumeration value="Int64"/>
<xs:enumeration value="IntervalDS"/>
<xs:enumeration value="IntervalYM"/>
<xs:enumeration value="Long"/>
<xs:enumeration value="LongRaw"/>
<xs:enumeration value="NChar"/>
<xs:enumeration value="NClob"/>
<xs:enumeration value="NVarchar2"/>
<xs:enumeration value="Object"/>
<xs:enumeration value="Raw"/>
<xs:enumeration value="Single"/>
<xs:enumeration value="TimeStamp"/>
<xs:enumeration value="TimeStampLTZ"/>
<xs:enumeration value="TimeStampTZ"/>
<xs:enumeration value="Varchar2"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="nativeDataType">
<xs:restriction base="xs:string">
<xs:enumeration value="BFile"/>
<xs:enumeration value="Binary_Float"/>
<xs:enumeration value="Binary_Double"/>
<xs:enumeration value="Blob"/>
<xs:enumeration value="Char"/>
<xs:enumeration value="Clob"/>
<xs:enumeration value="Date"/>
<xs:enumeration value="Number"/>
<xs:enumeration value="Interval Day To Second"/>
<xs:enumeration value="Interval Year To Month"/>
<xs:enumeration value="Long"/>
<xs:enumeration value="Long Raw"/>
<xs:enumeration value="NChar"/>
<xs:enumeration value="NClob"/>
<xs:enumeration value="NVarchar2"/>
<xs:enumeration value="Raw"/>
<xs:enumeration value="Rowid"/>
<xs:enumeration value="Timestamp"/>
<xs:enumeration value="Timestamp With Local Time Zone"/>
<xs:enumeration value="Timestamp With Time Zone"/>
<xs:enumeration value="URowid"/>
<xs:enumeration value="UserDefinedType"/>
<xs:enumeration value="Varchar2"/>
<xs:enumeration value="XmlType"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="providerDBType">
<xs:restriction base="xs:string">
<xs:enumeration value="AnsiString"/>
<xs:enumeration value="AnsiStringFixedLength"/>
<xs:enumeration value="Binary"/>
<xs:enumeration value="Byte"/>
<xs:enumeration value="Date"/>
<xs:enumeration value="DateTime"/>
<xs:enumeration value="DateTimeOffset"/>
<xs:enumeration value="Decimal"/>
<xs:enumeration value="Double"/>
<xs:enumeration value="Int16"/>
<xs:enumeration value="Int32"/>
<xs:enumeration value="Int64"/>
<xs:enumeration value="Object"/>
<xs:enumeration value="Single"/>
<xs:enumeration value="String"/>
<xs:enumeration value="StringFixedLength"/>
<xs:enumeration value="Time"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:include schemaLocation="Oracle.DataAccess.Common.Configuration.Section.xsd"/>
<xs:element name="oracle.manageddataaccess.client" >
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="version" type="odpmversiontype" minOccurs="0" />
</xs:choice>
</xs:complexType>
</xs:element>
<xs:complexType name="odpmversiontype">
<xs:complexContent>
<xs:extension base="odpmparameters">
<xs:attribute name="number" type="xs:string" use="required" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="odpmparameters">
<xs:all>
<xs:element minOccurs="0" name="settings">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" name="setting">
<xs:complexType>
<xs:attribute name="name" type="xs:string" use="required" />
<xs:attribute name="value" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="udtMappings">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" name="udtMapping">
<xs:complexType>
<xs:attribute name="typeName" type="xs:string" use="required" />
<xs:attribute name="factoryName" type="xs:string" use="required" />
<xs:attribute name="dataSource" type="xs:string" use="required" />
<xs:attribute name="schemaName" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="LDAPsettings">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" name="LDAPsetting">
<xs:complexType>
<xs:attribute name="name" type="xs:string" use="required" />
<xs:attribute name="value" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="distributedTransaction">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" name="setting">
<xs:complexType>
<xs:attribute name="name" type="xs:string" use="required" />
<xs:attribute name="value" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="dataSources">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" name="dataSource">
<xs:complexType>
<xs:attribute name="alias" type="xs:string" use="required" />
<xs:attribute name="descriptor" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="connectionPools">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" name="connectionPool">
<xs:complexType>
<xs:attribute name="connectionString" type="xs:string" use="required" />
<xs:attribute name="poolName" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="edmMappings">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="edmMapping">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="add">
<xs:complexType>
<xs:attribute name="name" type="xs:string" use="required" />
<xs:attribute name="precision" type="xs:int" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="dataType" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" maxOccurs="unbounded" name="edmNumberMapping">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="add">
<xs:complexType>
<xs:attribute name="NETType" type="xs:string" use="required" />
<xs:attribute name="MinPrecision" type="xs:int" use="required" />
<xs:attribute name="MaxPrecision" type="xs:int" use="required" />
<xs:attribute name="DBType" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="implicitRefCursor">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" name="storedProcedure">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="1" name="refCursor">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="1" minOccurs="1" name="bindInfo">
<xs:complexType>
<xs:attribute name="mode" type="parameterDirection" use="required" />
</xs:complexType>
</xs:element>
<xs:element maxOccurs="unbounded" minOccurs="0" name="metadata">
<xs:complexType>
<xs:attribute name="columnOrdinal" type="xs:int" use="required" />
<xs:attribute name="columnName" type="xs:string" use="required" />
<xs:attribute name="baseColumnName" type="xs:string" use="optional" />
<xs:attribute name="baseSchemaName" type="xs:string" use="optional" />
<xs:attribute name="baseTableName" type="xs:string" use="optional" />
<xs:attribute name="providerType" type="providerType" use="optional" />
<xs:attribute name="columnSize" type="xs:int" use="optional" />
<xs:attribute name="numericPrecision" type="xs:int" use="optional" />
<xs:attribute name="numericScale" type="xs:int" use="optional" />
<xs:attribute name="isUnique" type="customBoolean" use="optional" />
<xs:attribute name="isKey" type="customBoolean" use="optional" />
<xs:attribute name="isRowID" type="customBoolean" use="optional" />
<xs:attribute name="dataType" type="datatype" use="optional" />
<xs:attribute name="allowDBNull" type="customBoolean" use="optional" />
<xs:attribute name="isAliased" type="customBoolean" use="optional" />
<xs:attribute name="isByteSemantic" type="customBoolean" use="optional" />
<xs:attribute name="isExpression" type="customBoolean" use="optional" />
<xs:attribute name="isHidden" type="customBoolean" use="optional" />
<xs:attribute name="isReadOnly" type="customBoolean" use="optional" />
<xs:attribute name="isLong" type="customBoolean" use="optional" />
<xs:attribute name="udtTypeName" type="xs:string" use="optional" />
<xs:attribute name="nativeDataType" type="nativeDataType" use="optional" />
<xs:attribute name="providerDBType" type="providerDBType" use="optional" />
<xs:attribute name="objectName" type="xs:string" use="optional" />
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="name" type="xs:string" use="optional" />
<xs:attribute name="position" type="xs:int" use="optional" />
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="schema" type="xs:string" use="optional" />
<xs:attribute name="name" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="onsConfig">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="ons">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="3" minOccurs="1" name="add">
<xs:complexType>
<xs:attribute name="name" type="ONSParameters" use="required" />
<xs:attribute name="value" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="database" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="configFile" type="xs:string" use="optional" />
<xs:attribute name="mode" type="ONSModeValues" use="required" />
</xs:complexType>
</xs:element>
</xs:all>
</xs:complexType>
</xs:schema>
D:\smallproject\10.Paul需求-JSON贝格ES导入本地ES\ImportLocalES\BeigeOracleImportLocalES\bin\Debug\BeigeOracle_ImportLocalES.exe.config
D:\smallproject\10.Paul需求-JSON贝格ES导入本地ES\ImportLocalES\BeigeOracleImportLocalES\bin\Debug\BeigeOracle_ImportLocalES.exe.config
......@@ -60,6 +60,8 @@ D:\smallproject\10.Paul需求-JSON贝格ES导入本地ES\ImportLocalES\BeigeOrac
D:\smallproject\10.Paul需求-JSON贝格ES导入本地ES\ImportLocalES\BeigeOracleImportLocalES\bin\Debug\NPOI.xml
D:\smallproject\10.Paul需求-JSON贝格ES导入本地ES\ImportLocalES\BeigeOracleImportLocalES\bin\Debug\ServiceStack.Common.xml
D:\smallproject\10.Paul需求-JSON贝格ES导入本地ES\ImportLocalES\BeigeOracleImportLocalES\bin\Debug\ServiceStack.Text.xml
D:\smallproject\10.Paul需求-JSON贝格ES导入本地ES\ImportLocalES\BeigeOracleImportLocalES\bin\Debug\zh-Hans\EntityFramework.resources.dll
D:\smallproject\10.Paul需求-JSON贝格ES导入本地ES\ImportLocalES\BeigeOracleImportLocalES\bin\Debug\zh-Hans\EntityFramework.SqlServer.resources.dll
D:\smallproject\10.Paul需求-JSON贝格ES导入本地ES\ImportLocalES\BeigeOracleImportLocalES\obj\Debug\BeigeOracle_ImportLocalES.csprojResolveAssemblyReference.cache
D:\smallproject\10.Paul需求-JSON贝格ES导入本地ES\ImportLocalES\BeigeOracleImportLocalES\obj\Debug\BeigeOracle_ImportLocalES.Form1.resources
D:\smallproject\10.Paul需求-JSON贝格ES导入本地ES\ImportLocalES\BeigeOracleImportLocalES\obj\Debug\BeigeOracle_ImportLocalES.Properties.Resources.resources
......
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Elasticsearch.Net" version="2.5.8" targetFramework="net461" />
<package id="EntityFramework" version="6.0.0" targetFramework="net461" />
<package id="EntityFramework" version="6.1.3" targetFramework="net46" />
<package id="MySql.Data" version="6.9.12" targetFramework="net461" />
<package id="MySql.Data.Entity" version="6.9.12" targetFramework="net461" />
<package id="NEST" version="2.5.8" targetFramework="net461" />
<package id="Newtonsoft.Json" version="11.0.1" targetFramework="net461" />
<package id="Oracle.ManagedDataAccess" version="12.2.1100" targetFramework="net461" />
<package id="Oracle.ManagedDataAccess.EntityFramework" version="12.2.1100" targetFramework="net461" />
</packages>
\ No newline at end of file
注意:此程序,只允许执行1个客户端。不允许多个同时操作。将导致重复数据。
注意:此程序,只允许执行1个客户端。不允许多个同时操作。将导致重复数据。
1.注意:贝格的数据,存在特性:
2012-2017年8月28日之前,根本没有正文。(查询非常块)
而2017年8月28日之后,正文会让查询变得特别的慢。
\ No newline at end of file
D:\smallproject\10.Paul需求-JSON贝格ES导入本地ES\ImportLocalES\HJBeigeModel\bin\Debug\HJBeigeModel.dll.config
D:\smallproject\10.Paul需求-JSON贝格ES导入本地ES\ImportLocalES\HJBeigeModel\bin\Debug\HJBeigeModel.dll.config
......@@ -11,6 +11,5 @@ D:\smallproject\10.Paul需求-JSON贝格ES导入本地ES\ImportLocalES\HJBeigeMo
D:\smallproject\10.Paul需求-JSON贝格ES导入本地ES\ImportLocalES\HJBeigeModel\bin\Debug\Newtonsoft.Json.xml
D:\smallproject\10.Paul需求-JSON贝格ES导入本地ES\ImportLocalES\HJBeigeModel\bin\Debug\zh-Hans\EntityFramework.resources.dll
D:\smallproject\10.Paul需求-JSON贝格ES导入本地ES\ImportLocalES\HJBeigeModel\bin\Debug\zh-Hans\EntityFramework.SqlServer.resources.dll
D:\smallproject\10.Paul需求-JSON贝格ES导入本地ES\ImportLocalES\HJBeigeModel\obj\Debug\HJBeigeModel.csprojResolveAssemblyReference.cache
D:\smallproject\10.Paul需求-JSON贝格ES导入本地ES\ImportLocalES\HJBeigeModel\obj\Debug\HJBeigeModel.dll
D:\smallproject\10.Paul需求-JSON贝格ES导入本地ES\ImportLocalES\HJBeigeModel\obj\Debug\HJBeigeModel.pdb
D:\smallproject\10.Paul需求-JSON贝格ES导入本地ES\ImportLocalES\HJBeigeModel\bin\x86\Debug\HJBeigeModel.dll.config
D:\smallproject\10.Paul需求-JSON贝格ES导入本地ES\ImportLocalES\HJBeigeModel\bin\x86\Debug\HJBeigeModel.dll.config
......@@ -11,5 +11,6 @@ D:\smallproject\10.Paul需求-JSON贝格ES导入本地ES\ImportLocalES\HJBeigeMo
D:\smallproject\10.Paul需求-JSON贝格ES导入本地ES\ImportLocalES\HJBeigeModel\bin\x86\Debug\Newtonsoft.Json.xml
D:\smallproject\10.Paul需求-JSON贝格ES导入本地ES\ImportLocalES\HJBeigeModel\bin\x86\Debug\zh-Hans\EntityFramework.resources.dll
D:\smallproject\10.Paul需求-JSON贝格ES导入本地ES\ImportLocalES\HJBeigeModel\bin\x86\Debug\zh-Hans\EntityFramework.SqlServer.resources.dll
D:\smallproject\10.Paul需求-JSON贝格ES导入本地ES\ImportLocalES\HJBeigeModel\obj\x86\Debug\HJBeigeModel.csprojResolveAssemblyReference.cache
D:\smallproject\10.Paul需求-JSON贝格ES导入本地ES\ImportLocalES\HJBeigeModel\obj\x86\Debug\HJBeigeModel.dll
D:\smallproject\10.Paul需求-JSON贝格ES导入本地ES\ImportLocalES\HJBeigeModel\obj\x86\Debug\HJBeigeModel.pdb
D:\smallproject\10.Paul需求-JSON贝格ES导入本地ES\ImportLocalES\HTCommon\bin\Debug\HTCommon.dll.config
D:\smallproject\10.Paul需求-JSON贝格ES导入本地ES\ImportLocalES\HTCommon\bin\Debug\HTCommon.dll.config
......@@ -72,6 +72,5 @@ D:\smallproject\10.Paul需求-JSON贝格ES导入本地ES\ImportLocalES\HTCommon\
D:\smallproject\10.Paul需求-JSON贝格ES导入本地ES\ImportLocalES\HTCommon\bin\Debug\ServiceStack.Text.xml
D:\smallproject\10.Paul需求-JSON贝格ES导入本地ES\ImportLocalES\HTCommon\bin\Debug\zh-Hans\EntityFramework.resources.dll
D:\smallproject\10.Paul需求-JSON贝格ES导入本地ES\ImportLocalES\HTCommon\bin\Debug\zh-Hans\EntityFramework.SqlServer.resources.dll
D:\smallproject\10.Paul需求-JSON贝格ES导入本地ES\ImportLocalES\HTCommon\obj\Debug\HTCommon.csprojResolveAssemblyReference.cache
D:\smallproject\10.Paul需求-JSON贝格ES导入本地ES\ImportLocalES\HTCommon\obj\Debug\HTCommon.dll
D:\smallproject\10.Paul需求-JSON贝格ES导入本地ES\ImportLocalES\HTCommon\obj\Debug\HTCommon.pdb
D:\smallproject\10.Paul需求-JSON贝格ES导入本地ES\ImportLocalES\HTCommon\bin\x86\Debug\HTCommon.dll.config
D:\smallproject\10.Paul需求-JSON贝格ES导入本地ES\ImportLocalES\HTCommon\bin\x86\Debug\HTCommon.dll.config
......@@ -72,5 +72,6 @@ D:\smallproject\10.Paul需求-JSON贝格ES导入本地ES\ImportLocalES\HTCommon\
D:\smallproject\10.Paul需求-JSON贝格ES导入本地ES\ImportLocalES\HTCommon\bin\x86\Debug\ServiceStack.Text.xml
D:\smallproject\10.Paul需求-JSON贝格ES导入本地ES\ImportLocalES\HTCommon\bin\x86\Debug\zh-Hans\EntityFramework.resources.dll
D:\smallproject\10.Paul需求-JSON贝格ES导入本地ES\ImportLocalES\HTCommon\bin\x86\Debug\zh-Hans\EntityFramework.SqlServer.resources.dll
D:\smallproject\10.Paul需求-JSON贝格ES导入本地ES\ImportLocalES\HTCommon\obj\x86\Debug\HTCommon.csprojResolveAssemblyReference.cache
D:\smallproject\10.Paul需求-JSON贝格ES导入本地ES\ImportLocalES\HTCommon\obj\x86\Debug\HTCommon.dll
D:\smallproject\10.Paul需求-JSON贝格ES导入本地ES\ImportLocalES\HTCommon\obj\x86\Debug\HTCommon.pdb
<configuration>
++ /dev/null
<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
</configSections>
</configuration>
<configuration>
++ /dev/null
<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
</configSections>
</configuration>
# Copyright (c) Microsoft Corporation. All rights reserved.
++ /dev/null
# 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.Infrastructure.MigrationsPendingException',
'System.Data.Entity.Migrations.ProjectTypeNotSupportedException'
)
<#
.SYNOPSIS
Adds or updates an Entity Framework provider entry in the project config
file.
.DESCRIPTION
Adds an entry into the 'entityFramework' section of the project config
file for the specified provider invariant name and provider type. If an
entry for the given invariant name already exists, then that entry is
updated with the given type name, unless the given type name already
matches, in which case no action is taken. The 'entityFramework'
section is added if it does not exist. The config file is automatically
saved if and only if a change was made.
This command is typically used only by Entity Framework provider NuGet
packages and is run from the 'install.ps1' script.
.PARAMETER Project
The Visual Studio project to update. When running in the NuGet install.ps1
script the '$project' variable provided as part of that script should be
used.
.PARAMETER InvariantName
The provider invariant name that uniquely identifies this provider. For
example, the Microsoft SQL Server provider is registered with the invariant
name 'System.Data.SqlClient'.
.PARAMETER TypeName
The assembly-qualified type name of the provider-specific type that
inherits from 'System.Data.Entity.Core.Common.DbProviderServices'. For
example, for the Microsoft SQL Server provider, this type is
'System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer'.
#>
function Add-EFProvider
{
param (
[parameter(Position = 0,
Mandatory = $true)]
$Project,
[parameter(Position = 1,
Mandatory = $true)]
[string] $InvariantName,
[parameter(Position = 2,
Mandatory = $true)]
[string] $TypeName
)
Check-Project $project
$runner = New-EFConfigRunner $Project
try
{
Invoke-RunnerCommand $runner System.Data.Entity.ConnectionFactoryConfig.AddProviderCommand @( $InvariantName, $TypeName )
$error = Get-RunnerError $runner
if ($error)
{
if ($knownExceptions -notcontains $error.TypeName)
{
Write-Host $error.StackTrace
}
else
{
Write-Verbose $error.StackTrace
}
throw $error.Message
}
}
finally
{
Remove-Runner $runner
}
}
<#
.SYNOPSIS
Adds or updates an Entity Framework default connection factory in the
project config file.
.DESCRIPTION
Adds an entry into the 'entityFramework' section of the project config
file for the connection factory that Entity Framework will use by default
when creating new connections by convention. Any existing entry will be
overridden if it does not match. The 'entityFramework' section is added if
it does not exist. The config file is automatically saved if and only if
a change was made.
This command is typically used only by Entity Framework provider NuGet
packages and is run from the 'install.ps1' script.
.PARAMETER Project
The Visual Studio project to update. When running in the NuGet install.ps1
script the '$project' variable provided as part of that script should be
used.
.PARAMETER TypeName
The assembly-qualified type name of the connection factory type that
implements the 'System.Data.Entity.Infrastructure.IDbConnectionFactory'
interface. For example, for the Microsoft SQL Server Express provider
connection factory, this type is
'System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework'.
.PARAMETER ConstructorArguments
An optional array of strings that will be passed as arguments to the
connection factory type constructor.
#>
function Add-EFDefaultConnectionFactory
{
param (
[parameter(Position = 0,
Mandatory = $true)]
$Project,
[parameter(Position = 1,
Mandatory = $true)]
[string] $TypeName,
[string[]] $ConstructorArguments
)
Check-Project $project
$runner = New-EFConfigRunner $Project
try
{
Invoke-RunnerCommand $runner System.Data.Entity.ConnectionFactoryConfig.AddDefaultConnectionFactoryCommand @( $TypeName, $ConstructorArguments )
$error = Get-RunnerError $runner
if ($error)
{
if ($knownExceptions -notcontains $error.TypeName)
{
Write-Host $error.StackTrace
}
else
{
Write-Verbose $error.StackTrace
}
throw $error.Message
}
}
finally
{
Remove-Runner $runner
}
}
<#
.SYNOPSIS
Initializes the Entity Framework section in the project config file
and sets defaults.
.DESCRIPTION
Creates the 'entityFramework' section of the project config file and sets
the default connection factory to use SQL Express if it is running on the
machine, or LocalDb otherwise. Note that installing a different provider
may change the default connection factory. The config file is
automatically saved if and only if a change was made.
In addition, any reference to 'System.Data.Entity.dll' in the project is
removed.
This command is typically used only by Entity Framework provider NuGet
packages and is run from the 'install.ps1' script.
.PARAMETER Project
The Visual Studio project to update. When running in the NuGet install.ps1
script the '$project' variable provided as part of that script should be
used.
#>
function Initialize-EFConfiguration
{
param (
[parameter(Position = 0,
Mandatory = $true)]
$Project
)
Check-Project $project
$runner = New-EFConfigRunner $Project
try
{
Invoke-RunnerCommand $runner System.Data.Entity.ConnectionFactoryConfig.InitializeEntityFrameworkCommand
$error = Get-RunnerError $runner
if ($error)
{
if ($knownExceptions -notcontains $error.TypeName)
{
Write-Host $error.StackTrace
}
else
{
Write-Verbose $error.StackTrace
}
throw $error.Message
}
}
finally
{
Remove-Runner $runner
}
}
<#
.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 omitted, automatic migrations will be disabled.
.PARAMETER MigrationsDirectory
Specifies the name of the directory that will contain migrations code files.
If omitted, the directory will be named "Migrations".
.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 ContextProjectName
Specifies the project which contains the DbContext class to use. If omitted,
the context is assumed to be in the same project used for migrations.
.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] $MigrationsDirectory,
[string] $ProjectName,
[string] $StartUpProjectName,
[string] $ContextProjectName,
[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 $ContextProjectName $null $ConnectionStringName $ConnectionString $ConnectionProviderName
try
{
Invoke-RunnerCommand $runner System.Data.Entity.Migrations.EnableMigrationsCommand @( $EnableAutomaticMigrations.IsPresent, $Force.IsPresent ) @{ 'ContextTypeName' = $ContextTypeName; 'MigrationsDirectory' = $MigrationsDirectory }
$error = Get-RunnerError $runner
if ($error)
{
if ($knownExceptions -notcontains $error.TypeName)
{
Write-Host $error.StackTrace
}
else
{
Write-Verbose $error.StackTrace
}
throw $error.Message
}
$(Get-VSComponentModel).GetService([NuGetConsole.IPowerConsoleWindow]).Show()
}
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 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 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 $null $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
}
else
{
Write-Verbose $error.StackTrace
}
throw $error.Message
}
$(Get-VSComponentModel).GetService([NuGetConsole.IPowerConsoleWindow]).Show()
}
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 omitted, 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
omitted, 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 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 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 $null $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
}
else
{
Write-Verbose $error.StackTrace
}
throw $error.Message
}
$(Get-VSComponentModel).GetService([NuGetConsole.IPowerConsoleWindow]).Show()
}
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 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 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 $null $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
}
else
{
Write-Verbose $error.StackTrace
}
throw $error.Message
}
}
finally
{
Remove-Runner $runner
}
}
function New-MigrationsRunner($ProjectName, $StartUpProjectName, $ContextProjectName, $ConfigurationTypeName, $ConnectionStringName, $ConnectionString, $ConnectionProviderName)
{
$startUpProject = Get-MigrationsStartUpProject $StartUpProjectName $ProjectName
Build-Project $startUpProject
$project = Get-MigrationsProject $ProjectName
Build-Project $project
$contextProject = $project
if ($ContextProjectName)
{
$contextProject = Get-SingleProject $ContextProjectName
Build-Project $contextProject
}
$installPath = Get-EntityFrameworkInstallPath $project
$toolsPath = Join-Path $installPath tools
$info = New-AppDomainSetup $project $installPath
$domain = [AppDomain]::CreateDomain('Migrations', $null, $info)
$domain.SetData('project', $project)
$domain.SetData('contextProject', $contextProject)
$domain.SetData('startUpProject', $startUpProject)
$domain.SetData('configurationTypeName', $ConfigurationTypeName)
$domain.SetData('connectionStringName', $ConnectionStringName)
$domain.SetData('connectionString', $ConnectionString)
$domain.SetData('connectionProviderName', $ConnectionProviderName)
$dispatcher = New-DomainDispatcher $toolsPath
$domain.SetData('efDispatcher', $dispatcher)
return @{
Domain = $domain;
ToolsPath = $toolsPath
}
}
function New-EFConfigRunner($Project)
{
$installPath = Get-EntityFrameworkInstallPath $Project
$toolsPath = Join-Path $installPath tools
$info = New-AppDomainSetup $Project $installPath
$domain = [AppDomain]::CreateDomain('EFConfig', $null, $info)
$domain.SetData('project', $Project)
$dispatcher = New-DomainDispatcher $toolsPath
$domain.SetData('efDispatcher', $dispatcher)
return @{
Domain = $domain;
ToolsPath = $toolsPath
}
}
function New-AppDomainSetup($Project, $InstallPath)
{
$info = New-Object System.AppDomainSetup -Property @{
ShadowCopyFiles = 'true';
ApplicationBase = $InstallPath;
PrivateBinPath = 'tools';
ConfigurationFile = ([AppDomain]::CurrentDomain.SetupInformation.ConfigurationFile)
}
$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'
}
else
{
$info.PrivateBinPath += ';lib\net45'
}
return $info
}
function New-DomainDispatcher($ToolsPath)
{
$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)
return $dispatcher
}
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
}
function Check-Project($project)
{
if (!$project.FullName)
{
throw "The Project argument must refer to a Visual Studio project. Use the '`$project' variable provided by NuGet when running in install.ps1."
}
}
Export-ModuleMember @( 'Enable-Migrations', 'Add-Migration', 'Update-Database', 'Get-Migrations', 'Add-EFProvider', 'Add-EFDefaultConnectionFactory', 'Initialize-EFConfiguration') -Variable InitialDatabase
# SIG # Begin signature block
# MIIarwYJKoZIhvcNAQcCoIIaoDCCGpwCAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB
# gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR
# AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQUGD2nrGYv22CsZ8TVTLPYVoMj
# HJGgghWCMIIEwzCCA6ugAwIBAgITMwAAACs5MkjBsslI8wAAAAAAKzANBgkqhkiG
# 9w0BAQUFADB3MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4G
# A1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSEw
# HwYDVQQDExhNaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EwHhcNMTIwOTA0MjExMjM0
# WhcNMTMxMjA0MjExMjM0WjCBszELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hp
# bmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jw
# b3JhdGlvbjENMAsGA1UECxMETU9QUjEnMCUGA1UECxMebkNpcGhlciBEU0UgRVNO
# OkMwRjQtMzA4Ni1ERUY4MSUwIwYDVQQDExxNaWNyb3NvZnQgVGltZS1TdGFtcCBT
# ZXJ2aWNlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAprYwDgNlrlBa
# hmuFn0ihHsnA7l5JB4XgcJZ8vrlfYl8GJtOLObsYIqUukq3YS4g6Gq+bg67IXjmM
# wjJ7FnjtNzg68WL7aIICaOzru0CKsf6hLDZiYHA5YGIO+8YYOG+wktZADYCmDXiL
# NmuGiiYXGP+w6026uykT5lxIjnBGNib+NDWrNOH32thc6pl9MbdNH1frfNaVDWYM
# Hg4yFz4s1YChzuv3mJEC3MFf/TiA+Dl/XWTKN1w7UVtdhV/OHhz7NL5f5ShVcFSc
# uOx8AFVGWyiYKFZM4fG6CRmWgUgqMMj3MyBs52nDs9TDTs8wHjfUmFLUqSNFsq5c
# QUlPtGJokwIDAQABo4IBCTCCAQUwHQYDVR0OBBYEFKUYM1M/lWChQxbvjsav0iu6
# nljQMB8GA1UdIwQYMBaAFCM0+NlSRnAK7UD7dvuzK7DDNbMPMFQGA1UdHwRNMEsw
# SaBHoEWGQ2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3Rz
# L01pY3Jvc29mdFRpbWVTdGFtcFBDQS5jcmwwWAYIKwYBBQUHAQEETDBKMEgGCCsG
# AQUFBzAChjxodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY3Jv
# c29mdFRpbWVTdGFtcFBDQS5jcnQwEwYDVR0lBAwwCgYIKwYBBQUHAwgwDQYJKoZI
# hvcNAQEFBQADggEBAH7MsHvlL77nVrXPc9uqUtEWOca0zfrX/h5ltedI85tGiAVm
# aiaGXv6HWNzGY444gPQIRnwrc7EOv0Gqy8eqlKQ38GQ54cXV+c4HzqvkJfBprtRG
# 4v5mMjzXl8UyIfruGiWgXgxCLBEzOoKD/e0ds77OkaSRJXG5q3Kwnq/kzwBiiXCp
# uEpQjO4vImSlqOZNa5UsHHnsp6Mx2pBgkKRu/pMCDT8sJA3GaiaBUYNKELt1Y0Sq
# aQjGA+vizwvtVjrs73KnCgz0ANMiuK8icrPnxJwLKKCAyuPh1zlmMOdGFxjn+oL6
# WQt6vKgN/hz/A4tjsk0SAiNPLbOFhDvioUfozxUwggTsMIID1KADAgECAhMzAAAA
# sBGvCovQO5/dAAEAAACwMA0GCSqGSIb3DQEBBQUAMHkxCzAJBgNVBAYTAlVTMRMw
# EQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVN
# aWNyb3NvZnQgQ29ycG9yYXRpb24xIzAhBgNVBAMTGk1pY3Jvc29mdCBDb2RlIFNp
# Z25pbmcgUENBMB4XDTEzMDEyNDIyMzMzOVoXDTE0MDQyNDIyMzMzOVowgYMxCzAJ
# BgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25k
# MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xDTALBgNVBAsTBE1PUFIx
# HjAcBgNVBAMTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjCCASIwDQYJKoZIhvcNAQEB
# BQADggEPADCCAQoCggEBAOivXKIgDfgofLwFe3+t7ut2rChTPzrbQH2zjjPmVz+l
# URU0VKXPtIupP6g34S1Q7TUWTu9NetsTdoiwLPBZXKnr4dcpdeQbhSeb8/gtnkE2
# KwtA+747urlcdZMWUkvKM8U3sPPrfqj1QRVcCGUdITfwLLoiCxCxEJ13IoWEfE+5
# G5Cw9aP+i/QMmk6g9ckKIeKq4wE2R/0vgmqBA/WpNdyUV537S9QOgts4jxL+49Z6
# dIhk4WLEJS4qrp0YHw4etsKvJLQOULzeHJNcSaZ5tbbbzvlweygBhLgqKc+/qQUF
# 4eAPcU39rVwjgynrx8VKyOgnhNN+xkMLlQAFsU9lccUCAwEAAaOCAWAwggFcMBMG
# A1UdJQQMMAoGCCsGAQUFBwMDMB0GA1UdDgQWBBRZcaZaM03amAeA/4Qevof5cjJB
# 8jBRBgNVHREESjBIpEYwRDENMAsGA1UECxMETU9QUjEzMDEGA1UEBRMqMzE1OTUr
# NGZhZjBiNzEtYWQzNy00YWEzLWE2NzEtNzZiYzA1MjM0NGFkMB8GA1UdIwQYMBaA
# FMsR6MrStBZYAck3LjMWFrlMmgofMFYGA1UdHwRPME0wS6BJoEeGRWh0dHA6Ly9j
# cmwubWljcm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01pY0NvZFNpZ1BDQV8w
# OC0zMS0yMDEwLmNybDBaBggrBgEFBQcBAQROMEwwSgYIKwYBBQUHMAKGPmh0dHA6
# Ly93d3cubWljcm9zb2Z0LmNvbS9wa2kvY2VydHMvTWljQ29kU2lnUENBXzA4LTMx
# LTIwMTAuY3J0MA0GCSqGSIb3DQEBBQUAA4IBAQAx124qElczgdWdxuv5OtRETQie
# 7l7falu3ec8CnLx2aJ6QoZwLw3+ijPFNupU5+w3g4Zv0XSQPG42IFTp8263Os8ls
# ujksRX0kEVQmMA0N/0fqAwfl5GZdLHudHakQ+hywdPJPaWueqSSE2u2WoN9zpO9q
# GqxLYp7xfMAUf0jNTbJE+fA8k21C2Oh85hegm2hoCSj5ApfvEQO6Z1Ktwemzc6bS
# Y81K4j7k8079/6HguwITO10g3lU/o66QQDE4dSheBKlGbeb1enlAvR/N6EXVruJd
# PvV1x+ZmY2DM1ZqEh40kMPfvNNBjHbFCZ0oOS786Du+2lTqnOOQlkgimiGaCMIIF
# vDCCA6SgAwIBAgIKYTMmGgAAAAAAMTANBgkqhkiG9w0BAQUFADBfMRMwEQYKCZIm
# iZPyLGQBGRYDY29tMRkwFwYKCZImiZPyLGQBGRYJbWljcm9zb2Z0MS0wKwYDVQQD
# EyRNaWNyb3NvZnQgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMTAwODMx
# MjIxOTMyWhcNMjAwODMxMjIyOTMyWjB5MQswCQYDVQQGEwJVUzETMBEGA1UECBMK
# V2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0
# IENvcnBvcmF0aW9uMSMwIQYDVQQDExpNaWNyb3NvZnQgQ29kZSBTaWduaW5nIFBD
# QTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJyWVwZMGS/HZpgICBC
# mXZTbD4b1m/My/Hqa/6XFhDg3zp0gxq3L6Ay7P/ewkJOI9VyANs1VwqJyq4gSfTw
# aKxNS42lvXlLcZtHB9r9Jd+ddYjPqnNEf9eB2/O98jakyVxF3K+tPeAoaJcap6Vy
# c1bxF5Tk/TWUcqDWdl8ed0WDhTgW0HNbBbpnUo2lsmkv2hkL/pJ0KeJ2L1TdFDBZ
# +NKNYv3LyV9GMVC5JxPkQDDPcikQKCLHN049oDI9kM2hOAaFXE5WgigqBTK3S9dP
# Y+fSLWLxRT3nrAgA9kahntFbjCZT6HqqSvJGzzc8OJ60d1ylF56NyxGPVjzBrAlf
# A9MCAwEAAaOCAV4wggFaMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMsR6MrS
# tBZYAck3LjMWFrlMmgofMAsGA1UdDwQEAwIBhjASBgkrBgEEAYI3FQEEBQIDAQAB
# MCMGCSsGAQQBgjcVAgQWBBT90TFO0yaKleGYYDuoMW+mPLzYLTAZBgkrBgEEAYI3
# FAIEDB4KAFMAdQBiAEMAQTAfBgNVHSMEGDAWgBQOrIJgQFYnl+UlE/wq4QpTlVnk
# pDBQBgNVHR8ESTBHMEWgQ6BBhj9odHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtp
# L2NybC9wcm9kdWN0cy9taWNyb3NvZnRyb290Y2VydC5jcmwwVAYIKwYBBQUHAQEE
# SDBGMEQGCCsGAQUFBzAChjhodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpL2Nl
# cnRzL01pY3Jvc29mdFJvb3RDZXJ0LmNydDANBgkqhkiG9w0BAQUFAAOCAgEAWTk+
# fyZGr+tvQLEytWrrDi9uqEn361917Uw7LddDrQv+y+ktMaMjzHxQmIAhXaw9L0y6
# oqhWnONwu7i0+Hm1SXL3PupBf8rhDBdpy6WcIC36C1DEVs0t40rSvHDnqA2iA6VW
# 4LiKS1fylUKc8fPv7uOGHzQ8uFaa8FMjhSqkghyT4pQHHfLiTviMocroE6WRTsgb
# 0o9ylSpxbZsa+BzwU9ZnzCL/XB3Nooy9J7J5Y1ZEolHN+emjWFbdmwJFRC9f9Nqu
# 1IIybvyklRPk62nnqaIsvsgrEA5ljpnb9aL6EiYJZTiU8XofSrvR4Vbo0HiWGFzJ
# NRZf3ZMdSY4tvq00RBzuEBUaAF3dNVshzpjHCe6FDoxPbQ4TTj18KUicctHzbMrB
# 7HCjV5JXfZSNoBtIA1r3z6NnCnSlNu0tLxfI5nI3EvRvsTxngvlSso0zFmUeDord
# EN5k9G/ORtTTF+l5xAS00/ss3x+KnqwK+xMnQK3k+eGpf0a7B2BHZWBATrBC7E7t
# s3Z52Ao0CW0cgDEf4g5U3eWh++VHEK1kmP9QFi58vwUheuKVQSdpw5OPlcmN2Jsh
# rg1cnPCiroZogwxqLbt2awAdlq3yFnv2FoMkuYjPaqhHMS+a3ONxPdcAfmJH0c6I
# ybgY+g5yjcGjPa8CQGr/aZuW4hCoELQ3UAjWwz0wggYHMIID76ADAgECAgphFmg0
# AAAAAAAcMA0GCSqGSIb3DQEBBQUAMF8xEzARBgoJkiaJk/IsZAEZFgNjb20xGTAX
# BgoJkiaJk/IsZAEZFgltaWNyb3NvZnQxLTArBgNVBAMTJE1pY3Jvc29mdCBSb290
# IENlcnRpZmljYXRlIEF1dGhvcml0eTAeFw0wNzA0MDMxMjUzMDlaFw0yMTA0MDMx
# MzAzMDlaMHcxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYD
# VQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xITAf
# BgNVBAMTGE1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQTCCASIwDQYJKoZIhvcNAQEB
# BQADggEPADCCAQoCggEBAJ+hbLHf20iSKnxrLhnhveLjxZlRI1Ctzt0YTiQP7tGn
# 0UytdDAgEesH1VSVFUmUG0KSrphcMCbaAGvoe73siQcP9w4EmPCJzB/LMySHnfL0
# Zxws/HvniB3q506jocEjU8qN+kXPCdBer9CwQgSi+aZsk2fXKNxGU7CG0OUoRi4n
# rIZPVVIM5AMs+2qQkDBuh/NZMJ36ftaXs+ghl3740hPzCLdTbVK0RZCfSABKR2YR
# JylmqJfk0waBSqL5hKcRRxQJgp+E7VV4/gGaHVAIhQAQMEbtt94jRrvELVSfrx54
# QTF3zJvfO4OToWECtR0Nsfz3m7IBziJLVP/5BcPCIAsCAwEAAaOCAaswggGnMA8G
# A1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFCM0+NlSRnAK7UD7dvuzK7DDNbMPMAsG
# A1UdDwQEAwIBhjAQBgkrBgEEAYI3FQEEAwIBADCBmAYDVR0jBIGQMIGNgBQOrIJg
# QFYnl+UlE/wq4QpTlVnkpKFjpGEwXzETMBEGCgmSJomT8ixkARkWA2NvbTEZMBcG
# CgmSJomT8ixkARkWCW1pY3Jvc29mdDEtMCsGA1UEAxMkTWljcm9zb2Z0IFJvb3Qg
# Q2VydGlmaWNhdGUgQXV0aG9yaXR5ghB5rRahSqClrUxzWPQHEy5lMFAGA1UdHwRJ
# MEcwRaBDoEGGP2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1
# Y3RzL21pY3Jvc29mdHJvb3RjZXJ0LmNybDBUBggrBgEFBQcBAQRIMEYwRAYIKwYB
# BQUHMAKGOGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2kvY2VydHMvTWljcm9z
# b2Z0Um9vdENlcnQuY3J0MBMGA1UdJQQMMAoGCCsGAQUFBwMIMA0GCSqGSIb3DQEB
# BQUAA4ICAQAQl4rDXANENt3ptK132855UU0BsS50cVttDBOrzr57j7gu1BKijG1i
# uFcCy04gE1CZ3XpA4le7r1iaHOEdAYasu3jyi9DsOwHu4r6PCgXIjUji8FMV3U+r
# kuTnjWrVgMHmlPIGL4UD6ZEqJCJw+/b85HiZLg33B+JwvBhOnY5rCnKVuKE5nGct
# xVEO6mJcPxaYiyA/4gcaMvnMMUp2MT0rcgvI6nA9/4UKE9/CCmGO8Ne4F+tOi3/F
# NSteo7/rvH0LQnvUU3Ih7jDKu3hlXFsBFwoUDtLaFJj1PLlmWLMtL+f5hYbMUVbo
# nXCUbKw5TNT2eb+qGHpiKe+imyk0BncaYsk9Hm0fgvALxyy7z0Oz5fnsfbXjpKh0
# NbhOxXEjEiZ2CzxSjHFaRkMUvLOzsE1nyJ9C/4B5IYCeFTBm6EISXhrIniIh0EPp
# K+m79EjMLNTYMoBMJipIJF9a6lbvpt6Znco6b72BJ3QGEe52Ib+bgsEnVLaxaj2J
# oXZhtG6hE6a/qkfwEm/9ijJssv7fUciMI8lmvZ0dhxJkAj0tr1mPuOQh5bWwymO0
# eFQF1EEuUKyUsKV4q7OglnUa2ZKHE3UiLzKoCG6gW4wlv6DvhMoh1useT8ma7kng
# 9wFlb4kLfchpyOZu6qeXzjEp/w7FW1zYTRuh2Povnj8uVRZryROj/TGCBJcwggST
# AgEBMIGQMHkxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYD
# VQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xIzAh
# BgNVBAMTGk1pY3Jvc29mdCBDb2RlIFNpZ25pbmcgUENBAhMzAAAAsBGvCovQO5/d
# AAEAAACwMAkGBSsOAwIaBQCggbAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQw
# HAYKKwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwIwYJKoZIhvcNAQkEMRYEFHlP
# wIpDUAGAnbgDrTywRVvTXuBEMFAGCisGAQQBgjcCAQwxQjBAoCKAIABFAG4AdABp
# AHQAeQAgAEYAcgBhAG0AZQB3AG8AcgBroRqAGGh0dHA6Ly9tc2RuLmNvbS9kYXRh
# L2VmIDANBgkqhkiG9w0BAQEFAASCAQBGhre2E1qw0m8EQgJBaVLi6CgwVn7+qSCY
# WqIIcygRNohB5i3zj61/qTEa4DZLc0F3hvGC6aNwwjUbnoU4nZoqOSQgta2DaVul
# uhm7Y+BTZsXvYY9q26UjgUbo1jdBrWelIbu+3YV+pE00UVuV0RabWkEdFBr9HeOV
# nZYczzdVvnYkkkFxO25SVHZWT2nyWhYxMYv+HLoUBND1BmZzNYWnJqegL4BrczNm
# exycbGbRVEO45QOJEK+3vA4o6GKPk09wcFEmkvlncGKTz4fGhYWf5ELykT0TSQuL
# vP1PN35OUNzlpqc2FuWCDosVl8FUhphYXpiw/1sUnI5nPG8aGiUboYICKDCCAiQG
# CSqGSIb3DQEJBjGCAhUwggIRAgEBMIGOMHcxCzAJBgNVBAYTAlVTMRMwEQYDVQQI
# EwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3Nv
# ZnQgQ29ycG9yYXRpb24xITAfBgNVBAMTGE1pY3Jvc29mdCBUaW1lLVN0YW1wIFBD
# QQITMwAAACs5MkjBsslI8wAAAAAAKzAJBgUrDgMCGgUAoF0wGAYJKoZIhvcNAQkD
# MQsGCSqGSIb3DQEHATAcBgkqhkiG9w0BCQUxDxcNMTMwOTExMTYwNDU5WjAjBgkq
# hkiG9w0BCQQxFgQU0jwg1lgVl4Ydsz+7YfTew/L6w9EwDQYJKoZIhvcNAQEFBQAE
# ggEAT5kurkrFiaB7YVAWU7VrrXF4Pr9kGEnSMBr0VEfztrVGNOLsdyZYk12tRYnj
# 6MB0x1bajZMYXCj+0Z8oTzaG+JXASkNNIm4uWP1t6TsfixCw9Sr4p4cQUaIXwYj6
# AN+tmLT82knMkW8Q/8lcc8BzfL45pjXonMNCJm3QOUwQ3SqXKgEMTsKLULFvUmsm
# dlwbdl2nlNdNyF5t8NkQZX5NPkpXJ9gdz34XSXPADxBiuE1haiV8ckyfhBIgiq2A
# CM2eGdggysiSVJcQGJ/GzsAsRC89FQQeqcKisHrFz7UOL8oX8ZxJ/7CWHPQUmk/t
# gRpD2K2HFoKdbJziPMLEhoQ5yQ==
# SIG # End signature block
TOPIC
++ /dev/null
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 used with Entity Framework
Migrations.
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.
The following Entity Framework cmdlets are used by NuGet packages that
install Entity Framework providers. These commands are not usually used as
part of normal application development.
Cmdlet Description
------------------------------ ---------------------------------------
Add-EFProvider Adds or updates an Entity Framework
provider entry in the project config
file.
Add-EFDefaultConnectionFactory Adds or updates an Entity Framework
default connection factory in the
project config file.
Initialize-EFConfiguration Initializes the Entity Framework
section in the project config file and
sets defaults.
SEE ALSO
Enable-Migrations
Add-Migration
Update-Database
Get-Migrations
param($installPath, $toolsPath, $package, $project)
++ /dev/null
param($installPath, $toolsPath, $package, $project)
if (Get-Module | ?{ $_.Name -eq 'EntityFramework' })
{
Remove-Module EntityFramework
}
Import-Module (Join-Path $toolsPath EntityFramework.psd1)
# SIG # Begin signature block
# MIIarwYJKoZIhvcNAQcCoIIaoDCCGpwCAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB
# gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR
# AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQUjXj4E03IfImYfKMB4CA3DfY0
# KZmgghWCMIIEwzCCA6ugAwIBAgITMwAAADPlJ4ajDkoqgAAAAAAAMzANBgkqhkiG
# 9w0BAQUFADB3MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4G
# A1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSEw
# HwYDVQQDExhNaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EwHhcNMTMwMzI3MjAwODIz
# WhcNMTQwNjI3MjAwODIzWjCBszELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hp
# bmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jw
# b3JhdGlvbjENMAsGA1UECxMETU9QUjEnMCUGA1UECxMebkNpcGhlciBEU0UgRVNO
# OkY1MjgtMzc3Ny04QTc2MSUwIwYDVQQDExxNaWNyb3NvZnQgVGltZS1TdGFtcCBT
# ZXJ2aWNlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyt7KGQ8fllaC
# X9hCMtQIbbadwMLtfDirWDOta4FQuIghCl2vly2QWsfDLrJM1GN0WP3fxYlU0AvM
# /ZyEEXmsoyEibTPgrt4lQEWSTg1jCCuLN91PB2rcKs8QWo9XXZ09+hdjAsZwPrsi
# 7Vux9zK65HG8ef/4y+lXP3R75vJ9fFdYL6zSDqjZiNlAHzoiQeIJJgKgzOUlzoxn
# g99G+IVNw9pmHsdzfju0dhempaCgdFWo5WAYQWI4x2VGqwQWZlbq+abLQs9dVGQv
# gfjPOAAPEGvhgy6NPkjsSVZK7Jpp9MsPEPsHNEpibAGNbscghMpc0WOZHo5d7A+l
# Fkiqa94hLwIDAQABo4IBCTCCAQUwHQYDVR0OBBYEFABYGz7txfEGk74xPTa0rAtd
# MvCBMB8GA1UdIwQYMBaAFCM0+NlSRnAK7UD7dvuzK7DDNbMPMFQGA1UdHwRNMEsw
# SaBHoEWGQ2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3Rz
# L01pY3Jvc29mdFRpbWVTdGFtcFBDQS5jcmwwWAYIKwYBBQUHAQEETDBKMEgGCCsG
# AQUFBzAChjxodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY3Jv
# c29mdFRpbWVTdGFtcFBDQS5jcnQwEwYDVR0lBAwwCgYIKwYBBQUHAwgwDQYJKoZI
# hvcNAQEFBQADggEBAAL/44wD6u9+OLm5fJ87UoOk+iM41AO4alm16uBviAP0b1Fq
# lTp1hegc3AfFTp0bqM4kRxQkTzV3sZy8J3uPXU/8BouXl/kpm/dAHVKBjnZIA37y
# mxe3rtlbIpFjOzJfNfvGkTzM7w6ZgD4GkTgTegxMvjPbv+2tQcZ8GyR8E9wK/EuK
# IAUdCYmROQdOIU7ebHxwu6vxII74mHhg3IuUz2W+lpAPoJyE7Vy1fEGgYS29Q2dl
# GiqC1KeKWfcy46PnxY2yIruSKNiwjFOPaEdHodgBsPFhFcQXoS3jOmxPb6897t4p
# sETLw5JnugDOD44R79ECgjFJlJidUUh4rR3WQLYwggTsMIID1KADAgECAhMzAAAA
# sBGvCovQO5/dAAEAAACwMA0GCSqGSIb3DQEBBQUAMHkxCzAJBgNVBAYTAlVTMRMw
# EQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVN
# aWNyb3NvZnQgQ29ycG9yYXRpb24xIzAhBgNVBAMTGk1pY3Jvc29mdCBDb2RlIFNp
# Z25pbmcgUENBMB4XDTEzMDEyNDIyMzMzOVoXDTE0MDQyNDIyMzMzOVowgYMxCzAJ
# BgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25k
# MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xDTALBgNVBAsTBE1PUFIx
# HjAcBgNVBAMTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjCCASIwDQYJKoZIhvcNAQEB
# BQADggEPADCCAQoCggEBAOivXKIgDfgofLwFe3+t7ut2rChTPzrbQH2zjjPmVz+l
# URU0VKXPtIupP6g34S1Q7TUWTu9NetsTdoiwLPBZXKnr4dcpdeQbhSeb8/gtnkE2
# KwtA+747urlcdZMWUkvKM8U3sPPrfqj1QRVcCGUdITfwLLoiCxCxEJ13IoWEfE+5
# G5Cw9aP+i/QMmk6g9ckKIeKq4wE2R/0vgmqBA/WpNdyUV537S9QOgts4jxL+49Z6
# dIhk4WLEJS4qrp0YHw4etsKvJLQOULzeHJNcSaZ5tbbbzvlweygBhLgqKc+/qQUF
# 4eAPcU39rVwjgynrx8VKyOgnhNN+xkMLlQAFsU9lccUCAwEAAaOCAWAwggFcMBMG
# A1UdJQQMMAoGCCsGAQUFBwMDMB0GA1UdDgQWBBRZcaZaM03amAeA/4Qevof5cjJB
# 8jBRBgNVHREESjBIpEYwRDENMAsGA1UECxMETU9QUjEzMDEGA1UEBRMqMzE1OTUr
# NGZhZjBiNzEtYWQzNy00YWEzLWE2NzEtNzZiYzA1MjM0NGFkMB8GA1UdIwQYMBaA
# FMsR6MrStBZYAck3LjMWFrlMmgofMFYGA1UdHwRPME0wS6BJoEeGRWh0dHA6Ly9j
# cmwubWljcm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01pY0NvZFNpZ1BDQV8w
# OC0zMS0yMDEwLmNybDBaBggrBgEFBQcBAQROMEwwSgYIKwYBBQUHMAKGPmh0dHA6
# Ly93d3cubWljcm9zb2Z0LmNvbS9wa2kvY2VydHMvTWljQ29kU2lnUENBXzA4LTMx
# LTIwMTAuY3J0MA0GCSqGSIb3DQEBBQUAA4IBAQAx124qElczgdWdxuv5OtRETQie
# 7l7falu3ec8CnLx2aJ6QoZwLw3+ijPFNupU5+w3g4Zv0XSQPG42IFTp8263Os8ls
# ujksRX0kEVQmMA0N/0fqAwfl5GZdLHudHakQ+hywdPJPaWueqSSE2u2WoN9zpO9q
# GqxLYp7xfMAUf0jNTbJE+fA8k21C2Oh85hegm2hoCSj5ApfvEQO6Z1Ktwemzc6bS
# Y81K4j7k8079/6HguwITO10g3lU/o66QQDE4dSheBKlGbeb1enlAvR/N6EXVruJd
# PvV1x+ZmY2DM1ZqEh40kMPfvNNBjHbFCZ0oOS786Du+2lTqnOOQlkgimiGaCMIIF
# vDCCA6SgAwIBAgIKYTMmGgAAAAAAMTANBgkqhkiG9w0BAQUFADBfMRMwEQYKCZIm
# iZPyLGQBGRYDY29tMRkwFwYKCZImiZPyLGQBGRYJbWljcm9zb2Z0MS0wKwYDVQQD
# EyRNaWNyb3NvZnQgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMTAwODMx
# MjIxOTMyWhcNMjAwODMxMjIyOTMyWjB5MQswCQYDVQQGEwJVUzETMBEGA1UECBMK
# V2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0
# IENvcnBvcmF0aW9uMSMwIQYDVQQDExpNaWNyb3NvZnQgQ29kZSBTaWduaW5nIFBD
# QTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJyWVwZMGS/HZpgICBC
# mXZTbD4b1m/My/Hqa/6XFhDg3zp0gxq3L6Ay7P/ewkJOI9VyANs1VwqJyq4gSfTw
# aKxNS42lvXlLcZtHB9r9Jd+ddYjPqnNEf9eB2/O98jakyVxF3K+tPeAoaJcap6Vy
# c1bxF5Tk/TWUcqDWdl8ed0WDhTgW0HNbBbpnUo2lsmkv2hkL/pJ0KeJ2L1TdFDBZ
# +NKNYv3LyV9GMVC5JxPkQDDPcikQKCLHN049oDI9kM2hOAaFXE5WgigqBTK3S9dP
# Y+fSLWLxRT3nrAgA9kahntFbjCZT6HqqSvJGzzc8OJ60d1ylF56NyxGPVjzBrAlf
# A9MCAwEAAaOCAV4wggFaMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMsR6MrS
# tBZYAck3LjMWFrlMmgofMAsGA1UdDwQEAwIBhjASBgkrBgEEAYI3FQEEBQIDAQAB
# MCMGCSsGAQQBgjcVAgQWBBT90TFO0yaKleGYYDuoMW+mPLzYLTAZBgkrBgEEAYI3
# FAIEDB4KAFMAdQBiAEMAQTAfBgNVHSMEGDAWgBQOrIJgQFYnl+UlE/wq4QpTlVnk
# pDBQBgNVHR8ESTBHMEWgQ6BBhj9odHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtp
# L2NybC9wcm9kdWN0cy9taWNyb3NvZnRyb290Y2VydC5jcmwwVAYIKwYBBQUHAQEE
# SDBGMEQGCCsGAQUFBzAChjhodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpL2Nl
# cnRzL01pY3Jvc29mdFJvb3RDZXJ0LmNydDANBgkqhkiG9w0BAQUFAAOCAgEAWTk+
# fyZGr+tvQLEytWrrDi9uqEn361917Uw7LddDrQv+y+ktMaMjzHxQmIAhXaw9L0y6
# oqhWnONwu7i0+Hm1SXL3PupBf8rhDBdpy6WcIC36C1DEVs0t40rSvHDnqA2iA6VW
# 4LiKS1fylUKc8fPv7uOGHzQ8uFaa8FMjhSqkghyT4pQHHfLiTviMocroE6WRTsgb
# 0o9ylSpxbZsa+BzwU9ZnzCL/XB3Nooy9J7J5Y1ZEolHN+emjWFbdmwJFRC9f9Nqu
# 1IIybvyklRPk62nnqaIsvsgrEA5ljpnb9aL6EiYJZTiU8XofSrvR4Vbo0HiWGFzJ
# NRZf3ZMdSY4tvq00RBzuEBUaAF3dNVshzpjHCe6FDoxPbQ4TTj18KUicctHzbMrB
# 7HCjV5JXfZSNoBtIA1r3z6NnCnSlNu0tLxfI5nI3EvRvsTxngvlSso0zFmUeDord
# EN5k9G/ORtTTF+l5xAS00/ss3x+KnqwK+xMnQK3k+eGpf0a7B2BHZWBATrBC7E7t
# s3Z52Ao0CW0cgDEf4g5U3eWh++VHEK1kmP9QFi58vwUheuKVQSdpw5OPlcmN2Jsh
# rg1cnPCiroZogwxqLbt2awAdlq3yFnv2FoMkuYjPaqhHMS+a3ONxPdcAfmJH0c6I
# ybgY+g5yjcGjPa8CQGr/aZuW4hCoELQ3UAjWwz0wggYHMIID76ADAgECAgphFmg0
# AAAAAAAcMA0GCSqGSIb3DQEBBQUAMF8xEzARBgoJkiaJk/IsZAEZFgNjb20xGTAX
# BgoJkiaJk/IsZAEZFgltaWNyb3NvZnQxLTArBgNVBAMTJE1pY3Jvc29mdCBSb290
# IENlcnRpZmljYXRlIEF1dGhvcml0eTAeFw0wNzA0MDMxMjUzMDlaFw0yMTA0MDMx
# MzAzMDlaMHcxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYD
# VQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xITAf
# BgNVBAMTGE1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQTCCASIwDQYJKoZIhvcNAQEB
# BQADggEPADCCAQoCggEBAJ+hbLHf20iSKnxrLhnhveLjxZlRI1Ctzt0YTiQP7tGn
# 0UytdDAgEesH1VSVFUmUG0KSrphcMCbaAGvoe73siQcP9w4EmPCJzB/LMySHnfL0
# Zxws/HvniB3q506jocEjU8qN+kXPCdBer9CwQgSi+aZsk2fXKNxGU7CG0OUoRi4n
# rIZPVVIM5AMs+2qQkDBuh/NZMJ36ftaXs+ghl3740hPzCLdTbVK0RZCfSABKR2YR
# JylmqJfk0waBSqL5hKcRRxQJgp+E7VV4/gGaHVAIhQAQMEbtt94jRrvELVSfrx54
# QTF3zJvfO4OToWECtR0Nsfz3m7IBziJLVP/5BcPCIAsCAwEAAaOCAaswggGnMA8G
# A1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFCM0+NlSRnAK7UD7dvuzK7DDNbMPMAsG
# A1UdDwQEAwIBhjAQBgkrBgEEAYI3FQEEAwIBADCBmAYDVR0jBIGQMIGNgBQOrIJg
# QFYnl+UlE/wq4QpTlVnkpKFjpGEwXzETMBEGCgmSJomT8ixkARkWA2NvbTEZMBcG
# CgmSJomT8ixkARkWCW1pY3Jvc29mdDEtMCsGA1UEAxMkTWljcm9zb2Z0IFJvb3Qg
# Q2VydGlmaWNhdGUgQXV0aG9yaXR5ghB5rRahSqClrUxzWPQHEy5lMFAGA1UdHwRJ
# MEcwRaBDoEGGP2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1
# Y3RzL21pY3Jvc29mdHJvb3RjZXJ0LmNybDBUBggrBgEFBQcBAQRIMEYwRAYIKwYB
# BQUHMAKGOGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2kvY2VydHMvTWljcm9z
# b2Z0Um9vdENlcnQuY3J0MBMGA1UdJQQMMAoGCCsGAQUFBwMIMA0GCSqGSIb3DQEB
# BQUAA4ICAQAQl4rDXANENt3ptK132855UU0BsS50cVttDBOrzr57j7gu1BKijG1i
# uFcCy04gE1CZ3XpA4le7r1iaHOEdAYasu3jyi9DsOwHu4r6PCgXIjUji8FMV3U+r
# kuTnjWrVgMHmlPIGL4UD6ZEqJCJw+/b85HiZLg33B+JwvBhOnY5rCnKVuKE5nGct
# xVEO6mJcPxaYiyA/4gcaMvnMMUp2MT0rcgvI6nA9/4UKE9/CCmGO8Ne4F+tOi3/F
# NSteo7/rvH0LQnvUU3Ih7jDKu3hlXFsBFwoUDtLaFJj1PLlmWLMtL+f5hYbMUVbo
# nXCUbKw5TNT2eb+qGHpiKe+imyk0BncaYsk9Hm0fgvALxyy7z0Oz5fnsfbXjpKh0
# NbhOxXEjEiZ2CzxSjHFaRkMUvLOzsE1nyJ9C/4B5IYCeFTBm6EISXhrIniIh0EPp
# K+m79EjMLNTYMoBMJipIJF9a6lbvpt6Znco6b72BJ3QGEe52Ib+bgsEnVLaxaj2J
# oXZhtG6hE6a/qkfwEm/9ijJssv7fUciMI8lmvZ0dhxJkAj0tr1mPuOQh5bWwymO0
# eFQF1EEuUKyUsKV4q7OglnUa2ZKHE3UiLzKoCG6gW4wlv6DvhMoh1useT8ma7kng
# 9wFlb4kLfchpyOZu6qeXzjEp/w7FW1zYTRuh2Povnj8uVRZryROj/TGCBJcwggST
# AgEBMIGQMHkxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYD
# VQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xIzAh
# BgNVBAMTGk1pY3Jvc29mdCBDb2RlIFNpZ25pbmcgUENBAhMzAAAAsBGvCovQO5/d
# AAEAAACwMAkGBSsOAwIaBQCggbAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQw
# HAYKKwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwIwYJKoZIhvcNAQkEMRYEFOrT
# ZEbL6mMRie0QxeNrtIXxNuY6MFAGCisGAQQBgjcCAQwxQjBAoCKAIABFAG4AdABp
# AHQAeQAgAEYAcgBhAG0AZQB3AG8AcgBroRqAGGh0dHA6Ly9tc2RuLmNvbS9kYXRh
# L2VmIDANBgkqhkiG9w0BAQEFAASCAQAp46rF491ax2xI+ywddNCS8k+nfEHapr0P
# /5psYf8iQn+QOp8boRjDaP3AVdnbf+ZHAhkqc+/1RoEI6FbfLqPECRFKAdMip3vR
# cHC/CcTsCTrJzn9/seSsoVFO+6zY4K8VNtlGD4cQNXkOy+2WAdvXlyiUi4qKC7tr
# XyF6KsbdhqXynrfRHkPUTMm1KakaH571roCd40WQrNh5Sec4m1ndOoY6pR2y3c/d
# EyTV/T3IhH0i8AsQxFOhDnxFNDWPKY83my2mZCWiW9XTMykCqNsBcQ2iAIb3oIx7
# A7iLTvyDiVYrYfzVcJmJGqSZjAkHiKj02uIA/mWNyblckled8XzJoYICKDCCAiQG
# CSqGSIb3DQEJBjGCAhUwggIRAgEBMIGOMHcxCzAJBgNVBAYTAlVTMRMwEQYDVQQI
# EwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3Nv
# ZnQgQ29ycG9yYXRpb24xITAfBgNVBAMTGE1pY3Jvc29mdCBUaW1lLVN0YW1wIFBD
# QQITMwAAADPlJ4ajDkoqgAAAAAAAMzAJBgUrDgMCGgUAoF0wGAYJKoZIhvcNAQkD
# MQsGCSqGSIb3DQEHATAcBgkqhkiG9w0BCQUxDxcNMTMwOTExMTYwNDU5WjAjBgkq
# hkiG9w0BCQQxFgQUmKcMuWdwUtNtz9/a4twIEFV7cyAwDQYJKoZIhvcNAQEFBQAE
# ggEAGeJnAW3s1vuo0R4gs/yNDlYP0PmKSupeC+vyrhTFCogXq74IA2kmbNgzijI5
# AYhEFOONY8f5qcoDuU0HhONiQO/EKv6jL3T48WNGvNg15igIlwExHFDZTtEiJ7o1
# GSWiz+P7oyN3ZZDk5tNJcpJE0NDHY3xGbCqiOLfXZ5bxFXsfq5PfVuDy+S/oxCn4
# qrIpYW9pLYPK0+co2CB+IlQ5jBSpzTOe+s1gHrWfblWGFqWyd72yK9T4stnGLsR7
# nMu32fO1YrIeMiFqGh87y4/KLVhhBRCyOiy0s42Rn4UC3hnk2Z9WvnVVTvtjBUk4
# h/2NfIS33wkSUhkokpWtWKLrqQ==
# SIG # End signature block
param($installPath, $toolsPath, $package, $project)
++ /dev/null
param($installPath, $toolsPath, $package, $project)
Initialize-EFConfiguration $project
Add-EFProvider $project 'System.Data.SqlClient' 'System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer'
Write-Host
Write-Host "Type 'get-help EntityFramework' to see all available Entity Framework commands."
# SIG # Begin signature block
# MIIarwYJKoZIhvcNAQcCoIIaoDCCGpwCAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB
# gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR
# AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQUt8mwpdjiFmu2B4KBh+vEeQ+V
# VnSgghWCMIIEwzCCA6ugAwIBAgITMwAAADQkMUDJoMF5jQAAAAAANDANBgkqhkiG
# 9w0BAQUFADB3MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4G
# A1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSEw
# HwYDVQQDExhNaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EwHhcNMTMwMzI3MjAwODI1
# WhcNMTQwNjI3MjAwODI1WjCBszELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hp
# bmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jw
# b3JhdGlvbjENMAsGA1UECxMETU9QUjEnMCUGA1UECxMebkNpcGhlciBEU0UgRVNO
# OkI4RUMtMzBBNC03MTQ0MSUwIwYDVQQDExxNaWNyb3NvZnQgVGltZS1TdGFtcCBT
# ZXJ2aWNlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5RoHrQqWLNS2
# NGTLNCDyvARYgou1CdxS1HCf4lws5/VqpPW2LrGBhlkB7ElsKQQe9TiLVxj1wDIN
# 7TSQ7MZF5buKCiWq76F7h9jxcGdKzWrc5q8FkT3tBXDrQc+rsSVmu6uitxj5eBN4
# dc2LM1x97WfE7QP9KKxYYMF7vYCNM5NhYgixj1ESZY9BfsTVJektZkHTQzT6l4H4
# /Ieh7TlSH/jpPv9egMkGNgfb27lqxzfPhrUaS0rUJfLHyI2vYWeK2lMv80wegyxj
# yqAQUhG6gVhzQoTjNLLu6pO+TILQfZYLT38vzxBdGkVmqwLxXyQARsHBVdKDckIi
# hjqkvpNQAQIDAQABo4IBCTCCAQUwHQYDVR0OBBYEFF9LQt4MuTig1GY2jVb7dFlJ
# ZoErMB8GA1UdIwQYMBaAFCM0+NlSRnAK7UD7dvuzK7DDNbMPMFQGA1UdHwRNMEsw
# SaBHoEWGQ2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3Rz
# L01pY3Jvc29mdFRpbWVTdGFtcFBDQS5jcmwwWAYIKwYBBQUHAQEETDBKMEgGCCsG
# AQUFBzAChjxodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY3Jv
# c29mdFRpbWVTdGFtcFBDQS5jcnQwEwYDVR0lBAwwCgYIKwYBBQUHAwgwDQYJKoZI
# hvcNAQEFBQADggEBAA9CUKDVHq0XPx8Kpis3imdYLbEwTzvvwldp7GXTTMVQcvJz
# JfbkhALFdRxxWEOr8cmqjt/Kb1g8iecvzXo17GbX1V66jp9XhpQQoOtRN61X9id7
# I08Z2OBtdgQlMGESraWOoya2SOVT8kVOxbiJJxCdqePPI+l5bK6TaDoa8xPEFLZ6
# Op5B2plWntDT4BaWkHJMrwH3JAb7GSuYslXMep/okjprMXuA8w6eV4u35gW2OSWa
# l4IpNos4rq6LGqzu5+wuv0supQc1gfMTIOq0SpOev5yDVn+tFS9cKXELlGc4/DC/
# Zef1Od7qIu2HjKuyO7UBwq3g/I4lFQwivp8M7R0wggTsMIID1KADAgECAhMzAAAA
# sBGvCovQO5/dAAEAAACwMA0GCSqGSIb3DQEBBQUAMHkxCzAJBgNVBAYTAlVTMRMw
# EQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVN
# aWNyb3NvZnQgQ29ycG9yYXRpb24xIzAhBgNVBAMTGk1pY3Jvc29mdCBDb2RlIFNp
# Z25pbmcgUENBMB4XDTEzMDEyNDIyMzMzOVoXDTE0MDQyNDIyMzMzOVowgYMxCzAJ
# BgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25k
# MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xDTALBgNVBAsTBE1PUFIx
# HjAcBgNVBAMTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjCCASIwDQYJKoZIhvcNAQEB
# BQADggEPADCCAQoCggEBAOivXKIgDfgofLwFe3+t7ut2rChTPzrbQH2zjjPmVz+l
# URU0VKXPtIupP6g34S1Q7TUWTu9NetsTdoiwLPBZXKnr4dcpdeQbhSeb8/gtnkE2
# KwtA+747urlcdZMWUkvKM8U3sPPrfqj1QRVcCGUdITfwLLoiCxCxEJ13IoWEfE+5
# G5Cw9aP+i/QMmk6g9ckKIeKq4wE2R/0vgmqBA/WpNdyUV537S9QOgts4jxL+49Z6
# dIhk4WLEJS4qrp0YHw4etsKvJLQOULzeHJNcSaZ5tbbbzvlweygBhLgqKc+/qQUF
# 4eAPcU39rVwjgynrx8VKyOgnhNN+xkMLlQAFsU9lccUCAwEAAaOCAWAwggFcMBMG
# A1UdJQQMMAoGCCsGAQUFBwMDMB0GA1UdDgQWBBRZcaZaM03amAeA/4Qevof5cjJB
# 8jBRBgNVHREESjBIpEYwRDENMAsGA1UECxMETU9QUjEzMDEGA1UEBRMqMzE1OTUr
# NGZhZjBiNzEtYWQzNy00YWEzLWE2NzEtNzZiYzA1MjM0NGFkMB8GA1UdIwQYMBaA
# FMsR6MrStBZYAck3LjMWFrlMmgofMFYGA1UdHwRPME0wS6BJoEeGRWh0dHA6Ly9j
# cmwubWljcm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01pY0NvZFNpZ1BDQV8w
# OC0zMS0yMDEwLmNybDBaBggrBgEFBQcBAQROMEwwSgYIKwYBBQUHMAKGPmh0dHA6
# Ly93d3cubWljcm9zb2Z0LmNvbS9wa2kvY2VydHMvTWljQ29kU2lnUENBXzA4LTMx
# LTIwMTAuY3J0MA0GCSqGSIb3DQEBBQUAA4IBAQAx124qElczgdWdxuv5OtRETQie
# 7l7falu3ec8CnLx2aJ6QoZwLw3+ijPFNupU5+w3g4Zv0XSQPG42IFTp8263Os8ls
# ujksRX0kEVQmMA0N/0fqAwfl5GZdLHudHakQ+hywdPJPaWueqSSE2u2WoN9zpO9q
# GqxLYp7xfMAUf0jNTbJE+fA8k21C2Oh85hegm2hoCSj5ApfvEQO6Z1Ktwemzc6bS
# Y81K4j7k8079/6HguwITO10g3lU/o66QQDE4dSheBKlGbeb1enlAvR/N6EXVruJd
# PvV1x+ZmY2DM1ZqEh40kMPfvNNBjHbFCZ0oOS786Du+2lTqnOOQlkgimiGaCMIIF
# vDCCA6SgAwIBAgIKYTMmGgAAAAAAMTANBgkqhkiG9w0BAQUFADBfMRMwEQYKCZIm
# iZPyLGQBGRYDY29tMRkwFwYKCZImiZPyLGQBGRYJbWljcm9zb2Z0MS0wKwYDVQQD
# EyRNaWNyb3NvZnQgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMTAwODMx
# MjIxOTMyWhcNMjAwODMxMjIyOTMyWjB5MQswCQYDVQQGEwJVUzETMBEGA1UECBMK
# V2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0
# IENvcnBvcmF0aW9uMSMwIQYDVQQDExpNaWNyb3NvZnQgQ29kZSBTaWduaW5nIFBD
# QTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJyWVwZMGS/HZpgICBC
# mXZTbD4b1m/My/Hqa/6XFhDg3zp0gxq3L6Ay7P/ewkJOI9VyANs1VwqJyq4gSfTw
# aKxNS42lvXlLcZtHB9r9Jd+ddYjPqnNEf9eB2/O98jakyVxF3K+tPeAoaJcap6Vy
# c1bxF5Tk/TWUcqDWdl8ed0WDhTgW0HNbBbpnUo2lsmkv2hkL/pJ0KeJ2L1TdFDBZ
# +NKNYv3LyV9GMVC5JxPkQDDPcikQKCLHN049oDI9kM2hOAaFXE5WgigqBTK3S9dP
# Y+fSLWLxRT3nrAgA9kahntFbjCZT6HqqSvJGzzc8OJ60d1ylF56NyxGPVjzBrAlf
# A9MCAwEAAaOCAV4wggFaMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMsR6MrS
# tBZYAck3LjMWFrlMmgofMAsGA1UdDwQEAwIBhjASBgkrBgEEAYI3FQEEBQIDAQAB
# MCMGCSsGAQQBgjcVAgQWBBT90TFO0yaKleGYYDuoMW+mPLzYLTAZBgkrBgEEAYI3
# FAIEDB4KAFMAdQBiAEMAQTAfBgNVHSMEGDAWgBQOrIJgQFYnl+UlE/wq4QpTlVnk
# pDBQBgNVHR8ESTBHMEWgQ6BBhj9odHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtp
# L2NybC9wcm9kdWN0cy9taWNyb3NvZnRyb290Y2VydC5jcmwwVAYIKwYBBQUHAQEE
# SDBGMEQGCCsGAQUFBzAChjhodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpL2Nl
# cnRzL01pY3Jvc29mdFJvb3RDZXJ0LmNydDANBgkqhkiG9w0BAQUFAAOCAgEAWTk+
# fyZGr+tvQLEytWrrDi9uqEn361917Uw7LddDrQv+y+ktMaMjzHxQmIAhXaw9L0y6
# oqhWnONwu7i0+Hm1SXL3PupBf8rhDBdpy6WcIC36C1DEVs0t40rSvHDnqA2iA6VW
# 4LiKS1fylUKc8fPv7uOGHzQ8uFaa8FMjhSqkghyT4pQHHfLiTviMocroE6WRTsgb
# 0o9ylSpxbZsa+BzwU9ZnzCL/XB3Nooy9J7J5Y1ZEolHN+emjWFbdmwJFRC9f9Nqu
# 1IIybvyklRPk62nnqaIsvsgrEA5ljpnb9aL6EiYJZTiU8XofSrvR4Vbo0HiWGFzJ
# NRZf3ZMdSY4tvq00RBzuEBUaAF3dNVshzpjHCe6FDoxPbQ4TTj18KUicctHzbMrB
# 7HCjV5JXfZSNoBtIA1r3z6NnCnSlNu0tLxfI5nI3EvRvsTxngvlSso0zFmUeDord
# EN5k9G/ORtTTF+l5xAS00/ss3x+KnqwK+xMnQK3k+eGpf0a7B2BHZWBATrBC7E7t
# s3Z52Ao0CW0cgDEf4g5U3eWh++VHEK1kmP9QFi58vwUheuKVQSdpw5OPlcmN2Jsh
# rg1cnPCiroZogwxqLbt2awAdlq3yFnv2FoMkuYjPaqhHMS+a3ONxPdcAfmJH0c6I
# ybgY+g5yjcGjPa8CQGr/aZuW4hCoELQ3UAjWwz0wggYHMIID76ADAgECAgphFmg0
# AAAAAAAcMA0GCSqGSIb3DQEBBQUAMF8xEzARBgoJkiaJk/IsZAEZFgNjb20xGTAX
# BgoJkiaJk/IsZAEZFgltaWNyb3NvZnQxLTArBgNVBAMTJE1pY3Jvc29mdCBSb290
# IENlcnRpZmljYXRlIEF1dGhvcml0eTAeFw0wNzA0MDMxMjUzMDlaFw0yMTA0MDMx
# MzAzMDlaMHcxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYD
# VQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xITAf
# BgNVBAMTGE1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQTCCASIwDQYJKoZIhvcNAQEB
# BQADggEPADCCAQoCggEBAJ+hbLHf20iSKnxrLhnhveLjxZlRI1Ctzt0YTiQP7tGn
# 0UytdDAgEesH1VSVFUmUG0KSrphcMCbaAGvoe73siQcP9w4EmPCJzB/LMySHnfL0
# Zxws/HvniB3q506jocEjU8qN+kXPCdBer9CwQgSi+aZsk2fXKNxGU7CG0OUoRi4n
# rIZPVVIM5AMs+2qQkDBuh/NZMJ36ftaXs+ghl3740hPzCLdTbVK0RZCfSABKR2YR
# JylmqJfk0waBSqL5hKcRRxQJgp+E7VV4/gGaHVAIhQAQMEbtt94jRrvELVSfrx54
# QTF3zJvfO4OToWECtR0Nsfz3m7IBziJLVP/5BcPCIAsCAwEAAaOCAaswggGnMA8G
# A1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFCM0+NlSRnAK7UD7dvuzK7DDNbMPMAsG
# A1UdDwQEAwIBhjAQBgkrBgEEAYI3FQEEAwIBADCBmAYDVR0jBIGQMIGNgBQOrIJg
# QFYnl+UlE/wq4QpTlVnkpKFjpGEwXzETMBEGCgmSJomT8ixkARkWA2NvbTEZMBcG
# CgmSJomT8ixkARkWCW1pY3Jvc29mdDEtMCsGA1UEAxMkTWljcm9zb2Z0IFJvb3Qg
# Q2VydGlmaWNhdGUgQXV0aG9yaXR5ghB5rRahSqClrUxzWPQHEy5lMFAGA1UdHwRJ
# MEcwRaBDoEGGP2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1
# Y3RzL21pY3Jvc29mdHJvb3RjZXJ0LmNybDBUBggrBgEFBQcBAQRIMEYwRAYIKwYB
# BQUHMAKGOGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2kvY2VydHMvTWljcm9z
# b2Z0Um9vdENlcnQuY3J0MBMGA1UdJQQMMAoGCCsGAQUFBwMIMA0GCSqGSIb3DQEB
# BQUAA4ICAQAQl4rDXANENt3ptK132855UU0BsS50cVttDBOrzr57j7gu1BKijG1i
# uFcCy04gE1CZ3XpA4le7r1iaHOEdAYasu3jyi9DsOwHu4r6PCgXIjUji8FMV3U+r
# kuTnjWrVgMHmlPIGL4UD6ZEqJCJw+/b85HiZLg33B+JwvBhOnY5rCnKVuKE5nGct
# xVEO6mJcPxaYiyA/4gcaMvnMMUp2MT0rcgvI6nA9/4UKE9/CCmGO8Ne4F+tOi3/F
# NSteo7/rvH0LQnvUU3Ih7jDKu3hlXFsBFwoUDtLaFJj1PLlmWLMtL+f5hYbMUVbo
# nXCUbKw5TNT2eb+qGHpiKe+imyk0BncaYsk9Hm0fgvALxyy7z0Oz5fnsfbXjpKh0
# NbhOxXEjEiZ2CzxSjHFaRkMUvLOzsE1nyJ9C/4B5IYCeFTBm6EISXhrIniIh0EPp
# K+m79EjMLNTYMoBMJipIJF9a6lbvpt6Znco6b72BJ3QGEe52Ib+bgsEnVLaxaj2J
# oXZhtG6hE6a/qkfwEm/9ijJssv7fUciMI8lmvZ0dhxJkAj0tr1mPuOQh5bWwymO0
# eFQF1EEuUKyUsKV4q7OglnUa2ZKHE3UiLzKoCG6gW4wlv6DvhMoh1useT8ma7kng
# 9wFlb4kLfchpyOZu6qeXzjEp/w7FW1zYTRuh2Povnj8uVRZryROj/TGCBJcwggST
# AgEBMIGQMHkxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYD
# VQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xIzAh
# BgNVBAMTGk1pY3Jvc29mdCBDb2RlIFNpZ25pbmcgUENBAhMzAAAAsBGvCovQO5/d
# AAEAAACwMAkGBSsOAwIaBQCggbAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQw
# HAYKKwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwIwYJKoZIhvcNAQkEMRYEFJiz
# f4JawBv4s6ihwSKoeZTRDcAvMFAGCisGAQQBgjcCAQwxQjBAoCKAIABFAG4AdABp
# AHQAeQAgAEYAcgBhAG0AZQB3AG8AcgBroRqAGGh0dHA6Ly9tc2RuLmNvbS9kYXRh
# L2VmIDANBgkqhkiG9w0BAQEFAASCAQBl1eyDt2dp8f759lxqbnnQy+TYCdsEAqxP
# 5AY0A38rcH28zRXOGRwxLo1o7uwmP9WFgmBvTa5yvDLVXI9OPsQ2yy1ugJT9GLro
# l2v6TbtUikmli9JQ1cMXAQKCvJWr7q8pie9Xlv/Kf2hD/KdxqACw/O+wXVu43cZq
# ewAUd4OsKQ5kWTalsog9sIQ9NoggMVDGwPQc4F/da9LwXaL9hwl+8J0l2V5TZefk
# X5Hxsae0Souw8RR+u55r3OMyGxX4jANDVpsMzVh3bmNwsq0OaNtJ5WXx/1R5+72D
# yZQPi+wpjcSn8oDJEhCAvNT/jzX6NsxbnZr3fxEn8MfMB5BmkInAoYICKDCCAiQG
# CSqGSIb3DQEJBjGCAhUwggIRAgEBMIGOMHcxCzAJBgNVBAYTAlVTMRMwEQYDVQQI
# EwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3Nv
# ZnQgQ29ycG9yYXRpb24xITAfBgNVBAMTGE1pY3Jvc29mdCBUaW1lLVN0YW1wIFBD
# QQITMwAAADQkMUDJoMF5jQAAAAAANDAJBgUrDgMCGgUAoF0wGAYJKoZIhvcNAQkD
# MQsGCSqGSIb3DQEHATAcBgkqhkiG9w0BCQUxDxcNMTMwOTExMTYwNDU5WjAjBgkq
# hkiG9w0BCQQxFgQU/5ZEGkCagXUs+tIh1LXCDL6NUJYwDQYJKoZIhvcNAQEFBQAE
# ggEAQEqm6b+Ap0anii4Sb/4F2a3nHT1dFaqmAYVWiqS72t+Ws1j3mCKZRrrh8puT
# EOtUzKgx0wIBCr/DAFw9+g/S3zC3uhJkcyqPk3187Zcz/Qu9FKj0pFKO6fWpxfCU
# aN2iVBNRpldqusvVsRStMYj4cHOiGp3lilzg9iC1pNOlU4xBRDZ7i/r98K0gw2XI
# GMKTEKtcQQkS6ws7oJfO+asAqqUakB+y4MiWaxAworKMeT2GvpTSOSO2pEdq1DvJ
# r9NCSiCNxGx9Io/zJJA9T+0Ecs00/qPt5xTU23xeUl3q2I2l04AYIxKuDGZt6Xu7
# Rx8Cl1sC5w6EyCItwslF4WafkQ==
# SIG # End signature block
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment