diff --git a/docs/404.md b/docs/404.md deleted file mode 100644 index f01abe3..0000000 --- a/docs/404.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -layout: default -title: Error - 404 -permalink: /404.html ---- - -{% include template-h1.html %} - -Oops! The page has moved, or the link is broken. - -Let us know how you landed on this page, and we will try to fix the link: info@zzzprojects.com - -Go to Home diff --git a/docs/CNAME b/docs/CNAME deleted file mode 100644 index 8c1ae1c..0000000 --- a/docs/CNAME +++ /dev/null @@ -1 +0,0 @@ -bulk-operations.net \ No newline at end of file diff --git a/docs/_config.yml b/docs/_config.yml deleted file mode 100644 index 689283b..0000000 --- a/docs/_config.yml +++ /dev/null @@ -1,10 +0,0 @@ -highlighter: rouge -gems: - - jekyll-sitemap -defaults: - - - scope: - path: "" - type: "pages" - values: - last_modified_at: "2017-04-07" diff --git a/docs/_data/pages.csv b/docs/_data/pages.csv deleted file mode 100644 index 937880d..0000000 --- a/docs/_data/pages.csv +++ /dev/null @@ -1,50 +0,0 @@ -title,url,category -Overview,overview,tutorials -Requirements,requirements,tutorials -Installing,installing,tutorials -Upgrading,upgrading,tutorials -Licensing,licensing,tutorials -Bulk Methods,tutorial-bulk-methods,tutorials -Bulk Generic Methods,tutorial-bulk-generic-methods,tutorials -From Query Operations,tutorial-from-query-methods,tutorials -API,api,api -Bulk Insert,bulk-insert,api -Bulk Update,bulk-update,api -Bulk Delete,bulk-delete,api -Bulk Merge,bulk-merge,api -Bulk SaveChanges,bulk-savechanges,api -Bulk Synchronize,bulk-synchronize,api -Update from Query,update-from-query,api -Delete from Query,delete-from-query,api -Audit,audit,api -Batch,batch,api -Column Expression,column-expression,api -Execute Event,execute-event,api -Log,log,api -Temporary Table,temporary-table,api -Transient Error,transient-error,api -SQL Server,sql-server,api -BulkOperation Manager,bulkoperation-manager,api -Articles,articles,articles -Benchmark,benchmark-pitfall,articles -Insert IF NOT Exists,insert-if-not-exists,articles -Insert Keep Identity,insert-keep-identity,articles -Update Duplicate Key,update-duplicate-key,articles -Update Key Value,update-key-value,articles -Input Expression,input-expression,articles -Key Expression,key-expression,articles -Output Expression,output-expression,articles -Ignore on Merge Insert Expression,ignore-on-merge-insert-expression,articles -Ignore on Merge Update Expression,ignore-on-merge-update-expression,articles -Synchronize Expression,synchronize-expression,articles -FAQ,faq,faq -Contact Us,contact-us,faq -Issue Tracker,issue-tracker,faq -General,faq-general,faq -Installation,faq-installation,faq -License,faq-license,faq -Troubleshooting,troubleshooting,troubleshooting -Trial Period Expired,trial-period-expired-exception,troubleshooting -MD5,md5-exception,troubleshooting -Bulk Operations,/,home -Trial,trial,faq diff --git a/docs/_drafts/license.md b/docs/_drafts/license.md deleted file mode 100644 index 332acd6..0000000 --- a/docs/_drafts/license.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -layout: default -title: Entity Framework Extensions - license -permalink: license ---- - -{% include template-h1.html %} - -##### The trial period is expired. Please buy a product license or go to http://www.zzzprojects.com and download the latest trial version. - -This error may happen if no license has been added and the trial has expired. - -If you are evaluating the product, simply download the latest version. A new trial for the current month is always available few day before the start of the months. - -If you receive this error and you have added a license, you probably didn't add it right. - -##### ERROR_001: The provided license key is invalid or trial period is expired. Please buy a product license or go to http://www.zzzprojects.com and download the latest trial version. License Count: - -This error may happen if your license is valid but for another provider. - -My example, you purchased a license for SQL Server and try to user it with Oracle provider. - -##### ERROR_002: The provided license key is invalid or trial period is expired. Please buy a product license or go to http://www.zzzprojects.com and download the latest trial version. License Name: '{0}';License Key: '{1}' - -You receive this error when you enter an invalid license. Make sure the license key and license name is exactly what you received. - -This error may also be caused when FIPS Compliant algorithms is enabled. This options should always be disabled. - -You can find how to disable it here: http://docs.trendmicro.com/all/ent/sc/v3.0/en-US/cmcolh/t_fips.html - -##### ERROR_003:The provided license key is invalid or trial period is expired. Please buy a product license or go to http://www.zzzprojects.com and download the latest trial version. License Name: '{0}';License Key: '{1}';MD5 Issue; - -You receive this error when you enter an invalid license. Make sure the license key and license name is exactly what you received. - -This issue is often raised because the last character in the license key is missing! - -##### ERROR_004:The provided license key is invalid or trial period is expired. Please buy a product license or go to http://www.zzzprojects.com and download the latest trial version. License Name: '{0}';License Key: '{1}';ExpirationDate: '{2}' - -You receive this error when you try to use a version released after your support & upgrade expiration date. diff --git a/docs/_drafts/old_home.md b/docs/_drafts/old_home.md deleted file mode 100644 index b88e4a1..0000000 --- a/docs/_drafts/old_home.md +++ /dev/null @@ -1,708 +0,0 @@ - - - - - - - - - - - - EF BulkInsert, BulkSaveChanges, & Bulk Operations | Dramatically Improve EF Performance with Bulk SaveChanges and Bulk Operations. - - - - - - - - - - - - - - - -
-
-
- -
-

Bulk Operations

- -
-
-

Expression Evaluator

- -
-
-

Others

- -
-
-
-
- - - - - - - -
-
-
-
-
-
-
-

Dramatically Improve EF Performance with Bulk SaveChanges and Bulk Operations

-
-
-  Download -
- download - -
* PRO Version unlocked for the current month
-
-
-
-
-
-
-
-
-{% highlight csharp %} -// Easy to use -context.BulkSaveChanges(); - -// Easy to customize -context.BulkSaveChanges(bulk => bulk.BatchSize = 100); - -// Perform Bulk Operations -context.BulkDelete(customers); -context.BulkInsert(customers); -context.BulkUpdate(customers); - -// Customize Primary Key -context.BulkMerge(customers, operation => { - operation.ColumnPrimaryKeyExpression = - customer => customer.Code; -}); -{% endhighlight %} -
-
-
-
-
-
- - - - - -
-
-

Amazing performance, outstanding support!

- -

 Read More Success Story

-

-

Share your experience. We love to hear from you: info@zzzprojects.com

-
-
- - -
-
- - - -

Bulk SaveChanges

-
-
-

Improving your applications performance couldn’t have been made easier!

-
    -
  • Easy to use
  • -
  • Easy to customize
  • -
  • Easy to maintain
  • -
-
-
-{% highlight csharp %} -// Easy to use -context.BulkSaveChanges(); - -// Easy to customize -context.BulkSaveChanges(operation => operation.BatchSize = 1000); -{% endhighlight %} -
-
- -
- - - -

Bulk Operations

-
-
-

Use flexible features to overcome Entity Framework limitations

-
    -
  • Choose batch size
  • -
  • Choose columns
  • -
  • Choose primary key
  • -
- -
-
-{% highlight csharp %} -// Use all kind of bulk operations -context.BulkInsert(customers); -context.BulkUpdate(customers); -context.BulkDelete(customers); - -// Customize your operation -context.BulkMerge(customers, operation => { - operation.BatchSize = 1000; - operation.ColumnPrimaryKeyExpression = customer => customer.Code; -}); -{% endhighlight %} -
-
- -
- - - -

Bulk from LINQ Query

-
-
-

Perform bulk operations from LINQ Query without loading entities in the context.

-
    -
  • DeleteFromQuery
  • -
  • UpdateFromQuery
  • -
- -
-
-{% highlight csharp %} -// DELETE all customers that are inactive for more than 2 years -context.Customers - .Where(x => x.LastLogin < DateTime.Now.AddYears(-2)) - .DeleteFromQuery(operation => operation.BatchSize = 10000); - -// UPDATE all customers that are inactive for more than 2 years -context.Customers - .Where(x => x.Actif && x.LastLogin < DateTime.Now.AddYears(-2)) - .UpdateFromQuery(x => new Customer {Actif = false}); -{% endhighlight %} -
-
- - -

 View More Features

- -
-
- - - -
-
-

Test our Outstanding Support

-

We usually answer within the next business day, hour, or minutes!

-
-
-
-
-
-

Contact Us

-
- -
-

Email our team for any questions. We love to hear from you!

- info@zzzprojects.com -
-
-
-
-
-
-
-

Wiki

-
- -
-

Consult our complete documentation to help you getting started.

- Wiki -
-
-
-
-
-
-
-

Forum

-
- -
-

Visit the forum to report issues, ask questions, and propose new features.

- Forum -
-
-
-
-
-
-
-

Open Source

-
- -
-

Access the partial source of the library you're using. (Under development)

- GitHub -
-
-
-
-
-
- - - -
-
-
-
-

Pricing

-
-

Join thousands of projects already using bulk operations and make YOUR customers happy.

-
    -
  • Improve applications responsivity
  • -
  • Minimize time your customers wait
  • -
  • Maximize time your customers work
  • -
-

"Time Is Money" and your customers expect applications to respond as quickly as possible.

-
-

Every month, a FREE trial of the PRO version is available to let you evaluate all its features without limitations.

-
-

Looking for a free & open source library with must-have feature for Entity Framework?

-

Entity Framework Plus

-
    -
  • Auditing
  • -
  • Batch Delete
  • -
  • Batch Update
  • -
  • LINQ Dynamic
  • -
  • Query Cache
  • -
  • Query Deferred
  • -
  • Query Filter
  • -
  • Query Future
  • -
  • Query IncludeFilter
  • -
  • Query IncludeOptimized
  • -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FeaturesPRO
Bulk SaveChanges
Bulk Insert
Bulk Update
Bulk Delete
Bulk Merge
DeleteFromQuery
UpdateFromQuery
Commercial License
Royalty-Free
Support & Upgrades (1 year)
- -
- - -
- - -
- -
-
- -
- -

-

* Contact us (sales@zzzprojects.com) for Quote, payment method alternative, or major bundle discount when purchasing more than one product (or you already bought one).

-
-
-
-
- - - -
- - -
-
-
- -
-

Bulk Operations

- -
-
-

Expression Evaluator

- -
-
-

Others

- -
-
-
-
- - - - - - - - - - diff --git a/docs/_includes/aside.html b/docs/_includes/aside.html deleted file mode 100644 index 73e1b24..0000000 --- a/docs/_includes/aside.html +++ /dev/null @@ -1,148 +0,0 @@ -{% if page.path contains "/tutorials/" %} -
-
-

Bulk Operations - Tutorials

-
-
- -

Getting Started

- - -

Tutorials

- - -
-
- -{% elsif page.path contains "/api/" %} -
-
-

Bulk Operations - API

-
-
- -

Bulk Operations

- - -

FromQuery Operations

- - -

Options

- - -

Manager

- - -
-
- -{% elsif page.path contains "/articles/" %} -
-
-

Bulk Operations - Articles

-
-
- -

Common Mistake

- - -

Bulk Operations

- - -

Bulk Operations Generic

- - -
-
- -{% elsif page.path contains "/faq/" %} -
-
-

Bulk Operations - FAQ

-
-
- -

Getting Help

- - -

FAQ

- - -
-
- -{% elsif page.path contains "/troubleshooting/" %} -
-
-

Bulk Operations - Troubleshooting

-
-
- -

License

- -
-
- -{% endif %} - - diff --git a/docs/_includes/infozzzprojects-email.html b/docs/_includes/infozzzprojects-email.html deleted file mode 100644 index c57c078..0000000 --- a/docs/_includes/infozzzprojects-email.html +++ /dev/null @@ -1 +0,0 @@ -info@zzzprojects.com diff --git a/docs/_includes/template-example.html b/docs/_includes/template-example.html deleted file mode 100644 index 79c41c0..0000000 --- a/docs/_includes/template-example.html +++ /dev/null @@ -1,7 +0,0 @@ -

-{% if include.title == null %} - Example -{% else %} - {{ include.title }} -{% endif %} -

diff --git a/docs/_includes/template-exception-cause.html b/docs/_includes/template-exception-cause.html deleted file mode 100644 index 3cae9de..0000000 --- a/docs/_includes/template-exception-cause.html +++ /dev/null @@ -1 +0,0 @@ -This error can be caused for the following reasons: diff --git a/docs/_includes/template-exception.html b/docs/_includes/template-exception.html deleted file mode 100644 index 8285735..0000000 --- a/docs/_includes/template-exception.html +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/docs/_includes/template-execute-thrown.html b/docs/_includes/template-execute-thrown.html deleted file mode 100644 index 9ee2a4a..0000000 --- a/docs/_includes/template-execute-thrown.html +++ /dev/null @@ -1 +0,0 @@ -You execute the method {{ include.methodName }}, and the following error is thrown: diff --git a/docs/_includes/template-h1.html b/docs/_includes/template-h1.html deleted file mode 100644 index af7c187..0000000 --- a/docs/_includes/template-h1.html +++ /dev/null @@ -1,7 +0,0 @@ -

-{% if include.title == null %} - Bulk Operations - {{ page.title }} -{% else %} - Bulk Operations - {{ include.title }} -{% endif %} -

diff --git a/docs/_includes/template-related.html b/docs/_includes/template-related.html deleted file mode 100644 index 5ccfa1a..0000000 --- a/docs/_includes/template-related.html +++ /dev/null @@ -1,19 +0,0 @@ -{% assign hasOne = false %} -{% for num in (0..site.data.pages.size) %} - {% if site.data.pages[num].tags contains page.permalink %} - {% assign hasOne = true %} - {% endif %} -{% endfor %} - -{% if hasOne == true %} - -

Troubleshooting

- - -{% endif%} diff --git a/docs/_layouts/default.html b/docs/_layouts/default.html deleted file mode 100644 index 56a33c4..0000000 --- a/docs/_layouts/default.html +++ /dev/null @@ -1,390 +0,0 @@ - - - - - - - - - - - - - Bulk Operations - {{ page.title }} - - - - - - - - - - -
- - -
- - -
- - - -
- - -
- - - -
- -
- - -
- - - - - - - -
-
- -
- -
-
- -{% if page.path != "index.md" and page.path != "pages/documentation.md" %} -
- -
-
- -
- {% for num in (0..site.data.pages.size) %} - {% assign page2 = site.data.pages[num] %} - {% if page2.url == page.permalink %} - {% assign next_i = forloop.index0 | plus: 1 %} - {% assign prev_i = forloop.index0 | minus: 1 %} - - {% if next_i == site.data.pages[num] %} - {% assign next_i = 1 %} - {% endif %} - {% endif %} - {% endfor %} - - - -{{ content }} - -{% include template-related.html %} - -
-{% if page.path contains "404" %} -{% else %} - -{% endif %} -
-
- -
-







-
-{% else %} -
-


{{ content }}
-
-{% endif %} - -
-
- - - - - - - - - - - - - - - - diff --git a/docs/_sass/highlight.scss b/docs/_sass/highlight.scss deleted file mode 100644 index d90d3f1..0000000 --- a/docs/_sass/highlight.scss +++ /dev/null @@ -1,53 +0,0 @@ -.highlight .k { color: #0000ff; font-weight: normal } -.highlight .nb { color: #0000ff; } -.highlight .nf { color: #c00; font-weight: 700;} -.highlight .c1 { color: #008000;} -.highlight .cm { color: #008000;} -.highlight .o { font-weight: normal;} - -pre { - counter-reset: line-numbering; - border: solid 1px #d9d9d9; - border-radius: 0; - background: #fff; - padding: 15; - line-height: 23px; - margin-bottom: 30px; - white-space: pre; - overflow-x: auto; - word-break: inherit; - word-wrap: inherit; -} - -pre a::before { - content: counter(line-numbering); - counter-increment: line-numbering; - padding-right: 1em; - width: 25px; - text-align: right; - opacity: 0.7; - display: inline-block; - color: #aaa; - background: #eee; - margin-right: 16px; - padding: 2px 10px; - font-size: 13px; - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -pre a:first-of-type::before { - padding-top: 10px; -} - -pre a:last-of-type::before { - padding-bottom: 10px; -} - -pre a:only-of-type::before { - padding: 10px; -} diff --git a/docs/css/default.1.3.css b/docs/css/default.1.3.css deleted file mode 100644 index 8f99110..0000000 --- a/docs/css/default.1.3.css +++ /dev/null @@ -1,432 +0,0 @@ -/* general */ -* { - font-family: "Bitter",Georgia,"Times New Roman",serif; -} -.highlight * { - font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; -} -.text-bold-red { - color: #c00; - font-weight: 700; -} -.ul-link li { - padding: 10px 0; -} -@media (max-width: 61em) { - .text-center-md-down { - text-align: center; - } -} -@media (max-width: 33em) { - .text-center-xs-down { - text-align: center; - } -} -@media (min-width: 62em) { - .text-right-lg-up { - text-align: right; - } -} - -/* top-navbar */ -#top-navbar { - background-color: #000; - border-bottom: 1px solid #111; - border-radius: 0px; -} -#top-navbar a { - color: #fff; -} -#top-navbar a:hover { - opacity: 0.7; - transition: all 0.4s ease-in-out 0s; - text-decoration: none; -} -#top-navbar .navbar-nav-product .fa-caret-down { - display: none; -} -#top-navbar .navbar-nav-product .collapsed .fa-caret-down { - display: inline; -} -#top-navbar .navbar-nav-product .fa-caret-up { - display: inline; -} -#top-navbar .navbar-nav-product .collapsed .fa-caret-up { - display: none; -} -#top-navbar .navbar-nav-share { - margin-right: 30px; - margin-top: 8px; -} -#top-navbar .navbar-nav-share { - border: 1px solid #999; -} -#top-navbar .navbar-nav-share li { - border-right: 1px solid #999; - padding: 0.4rem 1rem; - margin-left: 0px; -} -#top-navbar .navbar-nav-share li:last-child { - border-right: 0px; -} - - -/* top-product */ -#top-product { - border-top: 1px solid #333; - padding: 20px 0px; -} -#top-product h3 { - letter-spacing: 1px; - font-size: 18px; - font-weight: 700; -} -#top-product ul { - list-style: none; - padding-left: 0px; -} -#top-product ul li { - padding-top: 5px; -} -#top-product a { - color: #c00; - font-size: 14px; - letter-spacing: 0.5px; -} -#top-product a:hover { - opacity: 0.7; - text-decoration: none; - transition: all 0.4s ease-in-out 0s; -} - -/* menu */ -#menu { - background-color: #222; - border-radius: 0px; - color: #fff; - border-top: 1px solid #444; -} -#menu .navbar-bar-menu-mobile li { - font-size: 26px; -} -#menu .navbar-bar-menu-mobile .navbar-toggler { - font-size: 2rem; -} -#menu .navbar-nav-header { - padding-left: 20px; -} -#menu .navbar-nav-header small { - display: block; - font-size: 16px; - margin-top: 5px -} -#menu .navbar-nav-menu { - font-size: 20px; - margin-top: 8px; -} -#menu .navbar-nav-menu li { - padding: 5px 10px; -} -#menu .navbar-nav-menu a { - color: #fff; -} -#menu .navbar-nav-menu a:hover { - opacity: 0.7; - transition: all 0.4s ease-in-out 0s; -} - -/* menu-mobile */ -#menu-mobile ul { - list-style: none; - padding-left: 0px; -} -#menu-mobile ul li { - padding-top: 5px; -} -#menu-mobile a { - color: #c00; - font-size: 14px; - letter-spacing: 0.5px; -} -#menu-mobile a.btn { - color: #fff; -} -#menu-mobile a:hover { - opacity: 0.7; - text-decoration: none; - transition: all 0.4s ease-in-out 0s; -} - -/* header */ -header { - background: -moz-linear-gradient(to top, #000, #333); - background: -webkit-linear-gradient(to top, #000, #333); - background: -ms-linear-gradient(to top, #000, #333); - background: -o-linear-gradient(to top, #000, #333); - background: linear-gradient(to top, #000, #333); - border-top: 1px solid #5d5d5d; - padding: 40px 0px; -} -header .card { - background-color: transparent; - border: none; - color: #fff; -} -header .card h2 { - font-size: 2.3rem; - font-weight: 900; -} -header .card h3 { - font-size: 1.3rem; -} -header .card hr { - border-color: initial; -} -header .card .lead .btn { - width: 175px; -} -header .card .lead .btn-left { - margin-right: 20px; -} -header .card .lead .btn span { - display: inline-block; - height: 40px; -} -header .card .lead .btn span span { - vertical-align : middle; -} -header .card .lead .text-muted { - font-size: 14px; - padding-top: 10px; -} -header .card .card-code { - background-color: #fff; - color: #000; - padding: 0px; -} -@media (max-width: 33em) { - header .card h1 { - font-size: 2.5rem; - } - header .card .lead .btn { - margin-bottom: 20px; - } -} - -/* featured */ -#featured { - padding-bottom: 60px; -} -#featured h2 { - color: #000; - font-size: 32px; - font-weight: 700; - letter-spacing: 0.5px; - padding-top: 60px; - padding-bottom: 30px; -} -#featured .featured-tagline { - font-style: italic; -} -#featured .featured-list-sm ul li { - font-size: 16px; - padding: 5px 0; -} -#featured .thead-inverse th { - background: -moz-linear-gradient(to top, #000, #333); - background: -webkit-linear-gradient(to top, #000, #333); - background: -ms-linear-gradient(to top, #000, #333); - background: -o-linear-gradient(to top, #000, #333); - background: linear-gradient(to top, #000, #333); -} - -/* testimonials */ -#testimonials { - background: -moz-linear-gradient(to top, #ddd, #f2f2f2); - background: -webkit-linear-gradient(to top, #ddd, #f2f2f2); - background: -ms-linear-gradient(to top, #ddd, #f2f2f2); - background: -o-linear-gradient(to top, #ddd, #f2f2f2); - background: linear-gradient(to top, #ddd, #f2f2f2); - border-top: 1px solid #ccc; - padding-bottom: 60px; -} -#testimonials { - padding: 60px 0px; - text-align: center; -} -#testimonials ul { - list-style: none; - padding: 40px 0px; -} -#testimonials ul li { - font-style: italic; - padding: 10px 0; -} - -/* feature */ -#feature { - border-bottom: 1px solid #ddd; - border-top: 1px solid #eee; - padding-bottom: 60px; -} -#feature h2 { - color: #000; - font-size: 32px; - font-weight: 700; - letter-spacing: 0.5px; - padding-top: 60px; - padding-bottom: 30px; -} -#feature .feature-tagline { - font-style: italic; -} -#feature ul li { - font-size: 20px; - padding-top: 10px; - padding-bottom: 10px; -} -#feature hr { - margin-top: 60px; -} -#feature .more-feature { - margin-top: 90px; - text-align: center; -} - -/* support */ -#support { - background: -moz-linear-gradient(to top, #000, #333); - background: -webkit-linear-gradient(to top, #000, #333); - background: -ms-linear-gradient(to top, #000, #333); - background: -o-linear-gradient(to top, #000, #333); - background: linear-gradient(to top, #000, #333); - border-bottom: 1px solid #ddd; - border-top: 1px solid #eee; - color: #fff; - text-align: center; - padding-top: 60px; - padding-bottom: 60px; -} -#support h2 { - font-size: 32px; - font-weight: 700; - letter-spacing: 0.5px; - padding-bottom: 20px; -} -#support h3 { - font-size: 1.3rem; - padding-bottom: 40px; -} -#support .card { - color: #000; - border: 0.0625rem solid #ccc; -} -#support .card-text { - min-height: 75px; -} -#support i { - color: #0275d8; -} - -/* pricing */ -#pricing { - background-color: #fefefe; - padding-top: 60px; - padding-bottom: 60px; -} -#pricing h2 { - color: #000; - font-size: 32px; - font-weight: 700; -} -#pricing .pricing-tagline { - font-style: italic; -} -#pricing .table thead th { - text-align: center; -} -#pricing .table td { - text-align: center; -} -#pricing .fa-times { - color: #c9302c; -} -#pricing .fa-check-square-o { - color: #449D44; -} -#pricing .thead-inverse th { - background: -moz-linear-gradient(to top, #000, #333); - background: -webkit-linear-gradient(to top, #000, #333); - background: -ms-linear-gradient(to top, #000, #333); - background: -o-linear-gradient(to top, #000, #333); - background: linear-gradient(to top, #000, #333); -} - -/* product */ -#product { - background: -moz-linear-gradient(to top, #000, #333); - background: -webkit-linear-gradient(to top, #000, #333); - background: -ms-linear-gradient(to top, #000, #333); - background: -o-linear-gradient(to top, #000, #333); - background: linear-gradient(to top, #000, #333); - border-bottom: 1px solid #5d5d5d; - color: #fefefe; - padding: 20px 0px; -} -#product h3 { - letter-spacing: 1px; - font-size: 18px; - font-weight: 700; -} -#product ul { - list-style: none; - padding-left: 0px; -} -#product ul li { - padding-top: 5px; -} -#product a { - color: #999; - font-size: 14px; - letter-spacing: 0.5px; -} -#product a:hover { - color: #fefefe; - opacity: 0.7; - text-decoration: none; - transition: all 0.4s ease-in-out 0s; -} - -/* footer */ -footer { - background: -moz-linear-gradient(top, #333, #222); - background: -webkit-linear-gradient(top, #333, #222); - background: -ms-linear-gradient(top, #333, #222); - background: -o-linear-gradient(top, #333, #222); - background: linear-gradient(top, #333, #222); - color: #666; - padding-top: 5px; - padding-bottom: 5px; -} -footer a { - color: #666; -} -footer a:hover { - color: #666; - opacity: 0.7; - text-decoration: none; - transition: all 0.4s ease-in-out 0s; -} -footer hr { - border-color: #666; - margin: 20px; -} -footer .social a { - font-size: 24px; - padding: 0px 10px; -} -@media (max-width: 61em) { - footer { - padding: 20px 0; - } -} diff --git a/docs/css/github2.css b/docs/css/github2.css deleted file mode 100644 index d90d3f1..0000000 --- a/docs/css/github2.css +++ /dev/null @@ -1,53 +0,0 @@ -.highlight .k { color: #0000ff; font-weight: normal } -.highlight .nb { color: #0000ff; } -.highlight .nf { color: #c00; font-weight: 700;} -.highlight .c1 { color: #008000;} -.highlight .cm { color: #008000;} -.highlight .o { font-weight: normal;} - -pre { - counter-reset: line-numbering; - border: solid 1px #d9d9d9; - border-radius: 0; - background: #fff; - padding: 15; - line-height: 23px; - margin-bottom: 30px; - white-space: pre; - overflow-x: auto; - word-break: inherit; - word-wrap: inherit; -} - -pre a::before { - content: counter(line-numbering); - counter-increment: line-numbering; - padding-right: 1em; - width: 25px; - text-align: right; - opacity: 0.7; - display: inline-block; - color: #aaa; - background: #eee; - margin-right: 16px; - padding: 2px 10px; - font-size: 13px; - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -pre a:first-of-type::before { - padding-top: 10px; -} - -pre a:last-of-type::before { - padding-bottom: 10px; -} - -pre a:only-of-type::before { - padding: 10px; -} diff --git a/docs/css/main_css_file.scss b/docs/css/main_css_file.scss deleted file mode 100644 index bcbd543..0000000 --- a/docs/css/main_css_file.scss +++ /dev/null @@ -1,212 +0,0 @@ ---- ---- - -@import "highlight"; - -/* utilities */ -.text-red { - color: #c00; -} - -/* header */ -header { - background-color: #fff; -} -/* .header-lg-up .header-site */ -.header-lg-up .header-site nav { - min-height: 100px; -} -.header-lg-up .header-site nav .navbar-brand { - font-size: 26px; - font-weight: 300; -} -.header-lg-up .header-site nav .navbar-brand a { - color: #000; - text-decoration: none; -} -.header-lg-up .header-site nav .navbar-menu .nav-item { - padding-left: 1em; - padding-right: 1em; -} -.header-lg-up .header-site nav .navbar-menu .nav-item a.nav-link { - color: #000; - font-size: 18px; - font-weight: 300; - padding-left: 0em; - padding-right: 0em; -} -.header-lg-up .header-site nav .navbar-menu .nav-item a.nav-link { - position: relative; - text-decoration: none; -} -.header-lg-up .header-site nav .navbar-menu .nav-item a.nav-link::after { - border-bottom: 2px solid #c00; - bottom: 0; - content: ""; - left: 0; - position: absolute; - transition: all 0.5s ease 0s; - width: 0; -} -.header-lg-up .header-site nav .navbar-menu .nav-item a.nav-link:hover::after { - width: 100%; -} -.header-lg-up .header-site nav .navbar-menu .nav-item-download { - padding-left: 60px; - padding-right: 0px; -} - -/* .header-lg-up .header-context */ -.header-lg-up .header-context nav { - box-shadow: 0 10px 10px 0 rgba(0, 0, 0, 0.3); - height: 40px; - padding-bottom: 0px; - padding-top: 0px; -} -.header-lg-up .header-context nav li { - font-size: 20px; - text-transform: uppercase; -} -.header-lg-up .header-context nav li .nav-link { - color: rgba(255, 255, 255, 0.95); - padding-left: 1rem !important; - padding-right: 1rem !important; -} -.header-lg-up .header-context nav li.active { - background-color: #5cb85c; -} -.header-lg-up .header-context nav li .fa-home { - font-size: 24px; -} - -/* .header-md-down .header-brand */ -.header-md-down .header-brand { - font-size: 26px; - font-weight: 300; - padding-left: 20px; - padding-top: 5px; - padding-bottom: 5px; -} -.header-md-down .header-brand a { - color: #000; - text-decoration: none; -} -.header-md-down nav { - min-height: 60px; -} -.header-md-down nav .navbar-collapse { - padding-top: 50px; -} - - -article h1 { - margin-top: 20px; - margin-bottom: 40px; - font-size: 48px; -} - -article h2 { - margin-top: 60px; - margin-bottom: 15px; - letter-spacing: 1px; - color: #2c3e50; - text-shadow: 2px 2px 3px #E5EFF5; -} - -article h3 { - font-size: 1.3rem; - margin-top: 40px; - margin-bottom: 20px; -} - -article h4 { - font-size: 1.1rem; - margin-top: 20px; - margin-bottom: 10px; -} - -pre { - padding: 7px; -} - -article h1 { -/* - border-top: 1px solid #1a242f; - border-bottom: 1px solid #1a242f; - padding-bottom: 10px; - padding-top: 10px;*/ - color: #1a242f; - letter-spacing: 1px; - text-shadow: 2px 2px 3px #e5eff5; - margin-top: 30px; - margin-bottom: 40px; -} -article h2 { - border-bottom: 1px solid #000; - padding-bottom: 12px; - padding-top: 15px; -} - -figure.highlight { - background-color: #f1f1f1; - padding: 30px; -} - -figure.highlight pre { - border-left: 4px solid #0275d8; - margin-bottom: 0px; - border-top: 0px; - border-right: 0px; - border-bottom: 0px; -} - -.example { - background-color: #f1f1f1; - margin-bottom: 0px; - padding-left: 30px; - padding-top: 20px; - -} - -.pagination { - margin-top: 20px; - margin-bottom: 20px; -} - -aside .card { - font-size: 14px; - margin-top: 20px; - box-shadow: 10px 10px 10px -10px #333; - border-radius: 0px; -} -aside .card .card-block { - padding: 10px; - padding-top: 0px; -} -aside .card h3 { - font-size: 22px; -} -aside .card h4 { - font-size: 18px; - margin-bottom: 5px; - margin-top: 10px; - font-weight: 100; - letter-spacing: 0.5px; -} -aside .card ul { - list-style-type: none; - padding-left: 15px; - margin-bottom: 5px; -} - -aside .card li { - padding: 2px 0; -} - -figure.highlight { - box-shadow: 10px 10px 10px -10px #333; -} - -article .jumbotron h2.display-4 { - font-size: 2.5rem; -} diff --git a/docs/images/entity-framework-extensions-right.jpg b/docs/images/entity-framework-extensions-right.jpg deleted file mode 100644 index 78211b3..0000000 Binary files a/docs/images/entity-framework-extensions-right.jpg and /dev/null differ diff --git a/docs/images/entity-framework-extensions-side.jpg b/docs/images/entity-framework-extensions-side.jpg deleted file mode 100644 index cb26a98..0000000 Binary files a/docs/images/entity-framework-extensions-side.jpg and /dev/null differ diff --git a/docs/images/entity-framework-extensions-top.jpg b/docs/images/entity-framework-extensions-top.jpg deleted file mode 100644 index 243edca..0000000 Binary files a/docs/images/entity-framework-extensions-top.jpg and /dev/null differ diff --git a/docs/images/entity-framework-extensions.jpg b/docs/images/entity-framework-extensions.jpg deleted file mode 100644 index 666b29d..0000000 Binary files a/docs/images/entity-framework-extensions.jpg and /dev/null differ diff --git a/docs/images/logo.png b/docs/images/logo.png deleted file mode 100644 index a25dd53..0000000 Binary files a/docs/images/logo.png and /dev/null differ diff --git a/docs/index.md b/docs/index.md deleted file mode 100644 index c485f04..0000000 --- a/docs/index.md +++ /dev/null @@ -1,760 +0,0 @@ ---- -layout: post ---- - - - - - - - - - - - - SQL Bulk Operations | Overcome SqlBulkCopy Limitations with High Performance C# Bulk Insert, Update, Delete and Merge. (SQLServer, SQLAzure, SQLCompact, MySQL, SQLite, .NET, ADO.NET, ASP.NET, C#, CSharp, MVC, MMVC, VB.NET) - - - - - - - - - - - - - - - -
-
-
- -
-

Bulk Operations

- -
-
-

Expression Evaluator

- -
-
-

Others

- -
-
-
-
- - - - - - - -
-
-
-
-
-
-
-

Extend and Overcome SqlBulkCopy Limitations with Must-Have Features

-
-
-  Download -
- download - -
* PRO Version unlocked for the current month
-
-
-
-
-
-
-
-
-{% highlight csharp %} -// Easy to use -var bulk = new BulkOperation(connection); -bulk.BulkInsert(dt); -bulk.BulkUpdate(dt); -bulk.BulkDelete(dt); -bulk.BulkMerge(dt); - -// Easy to customize -var bulk = new BulkOperation(connection); -bulk.BatchSize = 1000; -bulk.ColumnInputExpression = c => new { c.Name, c.FirstName }; -bulk.ColumnOutputExpression = c => c.CustomerID; -bulk.ColumnPrimaryKeyExpression = c => c.Code; -bulk.BulkMerge(customers); -{% endhighlight %} -
-
-
-
-
-
- - - - - -
-
-

Amazing performance, outstanding support!

- -

 Read More Success Story

-

-

Share your experience. We love to hear from you: info@zzzprojects.com

-
-
- - -
-
- - -

Output Identity Value

-
-
-

Overcome SqlBulkCopy limitations and use flexible features to output inserted identity and concurrency column values.

-
-
-{% highlight csharp %} -var bulk = new BulkOperation(connection) - -// Output newly inserted identity value after an insert -bulk.ColumnMappings.Add("CustomerID", ColumnMappingDirectionType.Output); - -bulk.BulkInsert(dt); -{% endhighlight %} -
-
- -
- - - -

Insert, Update, Delete, Merge and more...

-
-
-

Bulk Operations is not only about inserting, get more capability over SqlBulkCopy.

-
    -
  • BulkInsert
  • -
  • BulkUpdate
  • -
  • BulkDelete
  • -
  • BulkMerge (Upsert)
  • -
  • BulkSaveChanges
  • -
  • BulkSynchronize
  • -
- -
-
-{% highlight csharp %} -// Support all type of operations -var bulk = new BulkOperation(connection); -bulk.BulkInsert(dt); -bulk.BulkUpdate(dt); -bulk.BulkDelete(dt); -bulk.BulkMerge(dt); -bulk.BulkSaveChanges(ds); -bulk.BulkSynchronize(dt); -{% endhighlight %} -
-
- -
- - - -

Generic List<> as DataSource

-
-
-

Improve code maintainability by using strongly-typed lambda expression over hard coded string.

-
    -
  • Use Bulk Operations with Generic List<>
  • -
  • Use Bulk Operations with Expando Object
  • -
  • Use Lambda Expression for mapping
  • -
- -
-
-{% highlight csharp %} -var bulk= new BulkOperation(connection); -bulk.DestinationTableName = "Customer"; - -// Column Columns to Input -bulk.ColumnInputExpression = c => new { c.Code, c.Name }; - -// Choose Columns to Output -bulk.ColumnOutputExpression = c => c.CustomerID; - -// Choose Key to Use -bulk.ColumnPrimaryKeyExpression = c => c.Code; - -bulk.BulkMerge(customers); -{% endhighlight %} -
-
- -
- - - -

Bulk Operations from LINQ Query

-
-
-

Perform bulk operations from LINQ Query without loading entities in memory.

-
    -
  • DeleteFromQuery
  • -
  • UpdateFromQuery
  • -
- -
-
-{% highlight csharp %} -var bulk = new BulkOperation(connection); - -// DELETE all customers inactive for more than 2 years -bulk.DeleteFromQuery( - c => c.Where(x => x.LastLogin < DateTime.Now.AddYears(-2))); - -// UPDATE all customers inactive for more than 2 years -bulk.UpdateFromQuery( - c => c.Where(x => x.Actif && x.LastLogin < DateTime.Now.AddYears(-2)), - c => new Customer {Actif = false}); -{% endhighlight %} -
-
- -
- - - -

AutoMap with Case Insensitive

-
-
-

Sick of not being able to map column because of case sensitivity issue? Use flexible features to customize configuration

-
    -
  • Auditing
  • -
  • Batch Size
  • -
  • Case Sensitivity
  • -
  • Logging
  • -
- -
-
-{% highlight csharp %} -var bulk = new BulkOperation(connection); -bulk.CaseSensitive = CaseSensitiveType.Insensitive; -bulk.ColumnMappings.Add("cOdE", "Code"); -bulk.BulkMerge(dt); -{% endhighlight %} -
-
- - -

 View More Features

- -
-
- - - -
-
-

Test our Outstanding Support

-

We usually answer within the next business day, hour, or minutes!

-
-
-
-
-
-

Contact Us

-
- -
-

Email our team for any questions. We love to hear from you!

- info@zzzprojects.com -
-
-
-
-
-
-
-

Wiki

-
- -
-

Consult our complete documentation to help you getting started.

- Wiki -
-
-
-
-
-
-
-

Forum

-
- -
-

Visit the forum to report issues, ask questions, and propose new features.

- Forum -
-
-
-
-
-
-
-

Open Source

-
- -
-

Access the partial source of the library you're using. (Under development)

- GitHub -
-
-
-
-
-
- - - -
-
-
-
-

Pricing

-
-

Join thousands of projects already using bulk operations and make YOUR customers happy.

-
    -
  • Improve applications responsivity
  • -
  • Minimize time your customers wait
  • -
  • Maximize time your customers work
  • -
-

"Time Is Money" and your customers expect applications to respond as quickly as possible.

-
-

Every month, a FREE trial of the PRO version is available to let you evaluate all its features without limitations.

-
-

Using Entity Framework or Dapper?

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FeaturesPRO
Bulk Insert
Bulk Update
Bulk Delete
Bulk Merge
Bulk SaveChanges
Bulk Synchronize
DeleteFromQuery
UpdateFromQuery
Commercial License
Royalty-Free
Support & Upgrades (1 year)
- -
- - -
- - -
- -
-
- -
- -

-

* Contact us (sales@zzzprojects.com) for Quote, payment method alternative, or major bundle discount when purchasing more than one product (or you already bought one).

-
-
-
-
- - - -
- - -
-
-
- -
-

Bulk Operations

- -
-
-

Expression Evaluator

- -
-
-

Others

- -
-
-
-
- - - - - - - - - - diff --git a/docs/pages/api/api.md b/docs/pages/api/api.md deleted file mode 100644 index acdbc5a..0000000 --- a/docs/pages/api/api.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -layout: default -title: API -permalink: api ---- - -{% include template-h1.html %} - -## API - - diff --git a/docs/pages/api/bulk-delete.md b/docs/pages/api/bulk-delete.md deleted file mode 100644 index aaa8803..0000000 --- a/docs/pages/api/bulk-delete.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -layout: default -title: Bulk Delete -permalink: bulk-delete ---- - -{% include template-h1.html %} - -## Bulk Delete -Execute a DELETE operation. - -### Example - Bulk Insert -{% highlight csharp %} -var dt = new DataTable(); -// ...seed... - -var bulk = new BulkOperation(connection); - -// Easy to customize -bulk.BatchSize = 1000; - -// Easy to use -bulk.BulkDelete(dt); -{% endhighlight %} - -### Example - Bulk Insert Generic -{% highlight csharp %} -var list = new List(); -// ...seed... - -var bulk = new BulkOperation(connection); - -// Easy to customize -bulk.BatchSize = 1000; - -// Easy to use -bulk.BulkDelete(customers); -{% endhighlight %} - -### Performance Benchmarks - -| Operations | 1,000 Rows | 10,000 Rows | 100,000 Rows | 1,000,000 Rows | -| :-------------- | -------------: | -------------: | -------------: | -------------: | -| BulkDelete | 45 ms | 70 ms | 625 ms | 6,800 ms | diff --git a/docs/pages/api/bulk-insert.md b/docs/pages/api/bulk-insert.md deleted file mode 100644 index 993cf52..0000000 --- a/docs/pages/api/bulk-insert.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -layout: default -title: Bulk Insert -permalink: bulk-insert ---- - -{% include template-h1.html %} - -## Bulk Insert -Execute an INSERT operation. - -### Example - Bulk Insert -{% highlight csharp %} -var dt = new DataTable(); -// ...seed... - -var bulk = new BulkOperation(connection); - -// Easy to customize -bulk.BatchSize = 1000; - -// Easy to use -bulk.BulkInsert(dt); -{% endhighlight %} - -### Example - Bulk Insert Generic -{% highlight csharp %} -var list = new List(); -// ...seed... - -var bulk = new BulkOperation(connection); - -// Easy to customize -bulk.BatchSize = 1000; - -// Easy to use -bulk.BulkInsert(customers); -{% endhighlight %} - -### Performance Benchmarks - -| Operations | 1,000 Rows | 10,000 Rows | 100,000 Rows | 1,000,000 Rows | -| :-------------- | -------------: | -------------: | -------------: | -------------: | -| BulkInsert | 6 ms | 25 ms | 200 ms | 2,000 ms | diff --git a/docs/pages/api/bulk-merge.md b/docs/pages/api/bulk-merge.md deleted file mode 100644 index 71eef48..0000000 --- a/docs/pages/api/bulk-merge.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -layout: default -title: Bulk Merge -permalink: bulk-merge ---- - -{% include template-h1.html %} - -## Bulk Merge -Execute a MERGE/UPSERT operation. UPDATE existing rows matching the key, and INSERT new rows. - -### Example - Bulk Merge -{% highlight csharp %} -var dt = new DataTable(); -// ...seed... - -var bulk = new BulkOperation(connection); - -// Easy to customize -bulk.BatchSize = 1000; - -// Easy to use -bulk.BulkMerge(dt); -{% endhighlight %} - -### Example - Bulk Merge Generic -{% highlight csharp %} -var list = new List(); -// ...seed... - -var bulk = new BulkOperation(connection); - -// Easy to customize -bulk.BatchSize = 1000; - -// Easy to use -bulk.BulkMerge(customers); -{% endhighlight %} - -### Performance Benchmarks - -| Operations | 1,000 Rows | 10,000 Rows | 100,000 Rows | 1,000,000 Rows | -| :-------------- | -------------: | -------------: | -------------: | -------------: | -| BulkMerge | 65 ms | 160 ms | 1200 ms | 12,000 ms | diff --git a/docs/pages/api/bulk-savechanges.md b/docs/pages/api/bulk-savechanges.md deleted file mode 100644 index 1040b19..0000000 --- a/docs/pages/api/bulk-savechanges.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -layout: default -title: Bulk SaveChanges -permalink: bulk-savechanges ---- - -{% include template-h1.html %} - -## Introduction - -Execute an INSERT/UPDATE/DELETE operation using the DataRowState of the DataTable. - -### Example - Bulk SaveChanges -{% highlight csharp %} -var dt = new DataTable(); -// ...seed... - -var bulk = new BulkOperation(connection); - -// Easy to customize -bulk.BatchSize = 1000; - -// Easy to use -bulk.BulkSaveChanges(dt); -{% endhighlight %} diff --git a/docs/pages/api/bulk-synchronize.md b/docs/pages/api/bulk-synchronize.md deleted file mode 100644 index 79498fb..0000000 --- a/docs/pages/api/bulk-synchronize.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -layout: default -title: Bulk Synchronize -permalink: bulk-synchronize ---- - -{% include template-h1.html %} - -## Bulk Synchronize -Execute a SYNCHRONIZE operation. UPDATE existing rows matching the key, INSERT new rows and DELETE records from the destination not existing in the source. - -### Example - Bulk Synchronize -{% highlight csharp %} -var dt = new DataTable(); -// ...seed... - -var bulk = new BulkOperation(connection); - -// Easy to customize -bulk.BatchSize = 1000; - -// Easy to use -bulk.BulkSynchronize(dt); -{% endhighlight %} - -### Example - Bulk Synchronize Generic -{% highlight csharp %} -var list = new List(); -// ...seed... - -var bulk = new BulkOperation(connection); - -// Easy to customize -bulk.BatchSize = 1000; - -// Easy to use -bulk.BulkSynchronize(customers); -{% endhighlight %} - -### Performance Benchmarks - -| Operations | 1,000 Rows | 10,000 Rows | 100,000 Rows | 1,000,000 Rows | -| :-------------- | -------------: | -------------: | -------------: | -------------: | -| BulkSynchronize | 65 ms | 160 ms | 1200 ms | 12,000 ms | diff --git a/docs/pages/api/bulk-update.md b/docs/pages/api/bulk-update.md deleted file mode 100644 index bc0aab0..0000000 --- a/docs/pages/api/bulk-update.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -layout: default -title: Bulk Update -permalink: bulk-update ---- - -{% include template-h1.html %} - -## Bulk Update -Execute an UPDATE operation. - -### Example - Bulk Update -{% highlight csharp %} -var dt = new DataTable(); -// ...seed... - -var bulk = new BulkOperation(connection); - -// Easy to customize -bulk.BatchSize = 1000; - -// Easy to use -bulk.BulkUpdate(dt); -{% endhighlight %} - -### Example - Bulk Update Generic -{% highlight csharp %} -var list = new List(); -// ...seed... - -var bulk = new BulkOperation(connection); - -// Easy to customize -bulk.BatchSize = 1000; - -// Easy to use -bulk.BulkUpdate(customers); -{% endhighlight %} - -### Performance Benchmarks - -| Operations | 1,000 Rows | 10,000 Rows | 100,000 Rows | 1,000,000 Rows | -| :-------------- | -------------: | -------------: | -------------: | -------------: | -| BulkUpdate | 50 ms | 80 ms | 575 ms | 6,500 ms | diff --git a/docs/pages/api/bulkoperation-manager.md b/docs/pages/api/bulkoperation-manager.md deleted file mode 100644 index d308083..0000000 --- a/docs/pages/api/bulkoperation-manager.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -layout: default -title: BulkOperation Manager -permalink: bulkoperation-manager ---- - -{% include template-h1.html %} - -_Coming Soon_ diff --git a/docs/pages/api/delete-from-query.md b/docs/pages/api/delete-from-query.md deleted file mode 100644 index 7fbb3a8..0000000 --- a/docs/pages/api/delete-from-query.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -layout: default -title: Delete from Query -permalink: delete-from-query ---- - -{% include template-h1.html %} - -## Delete From Query -Execute a DELETE operation using a LINQ Query. - -### Example -{% highlight csharp %} -var bulk = new BulkOperation(connection); - -// DELETE all customers inactive for more than 2 years -bulk.DeleteFromQuery( - c => c.Where(x => x.LastLogin < DateTime.Now.AddYears(-2))); -{% endhighlight %} - -### Performance Benchmarks - -| Operations | 1,000 Entities | 2,000 Entities | 5,000 Entities | -| :-------------- | -------------: | -------------: | -------------: | -| DeleteFromQuery | 1 ms | 1 ms | 1 ms | - -### Support -- SQL Server 2008+ -- SQL Azure diff --git a/docs/pages/api/options-audit.md b/docs/pages/api/options-audit.md deleted file mode 100644 index 6cc4c0b..0000000 --- a/docs/pages/api/options-audit.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -layout: default -title: Audit -permalink: audit ---- - -{% include template-h1.html %} - -## Audit Options -- [UseAudit](#useaudit) - -## UseAudit -Allow you to audit inserted/deleted rows from the database. - -- Default Value: False - -### Example -{% highlight csharp %} -var bulk = new BulkOperation(connection); - -bulk.UseAudit = true; - -bulk.BulkMerge(dt); - -var auditEntries = bulk.AuditEntries; -{% endhighlight %} diff --git a/docs/pages/api/options-batch.md b/docs/pages/api/options-batch.md deleted file mode 100644 index 688e971..0000000 --- a/docs/pages/api/options-batch.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -layout: default -title: Batch -permalink: batch ---- - -{% include template-h1.html %} - -## Batch Options -- [BatchSize](#batchsize) -- [BatchTimeout](#batchtimeout) -- [BatchDelayInteval](#batchdelayinterval) - -## BatchSize -Allow you to set the number of records to use in a batch. - -By example, if you insert 1000 entities, and you set a batch size of 100, then ten inserts will be performed. - -### Example -{% highlight csharp %} -var bulk = new BulkOperation(connection); - -bulk.BatchSize = 100; - -bulk.BulkMerge(dt); -{% endhighlight %} - -## BatchTimeout -Allow you to set the maximum of time elapsing for a batch before the command throws a timeout exception. - -### Example -{% highlight csharp %} -var bulk = new BulkOperation(connection); - -bulk.BatchTimeout = 180; - -bulk.BulkMerge(dt); -{% endhighlight %} - -## BatchDelayInterval -Allow you to set a delay between every batch. - -### Example -{% highlight csharp %} -var bulk = new BulkOperation(connection); - -bulk.BatchDelayInterval = 100; - -bulk.BulkMerge(dt); -{% endhighlight %} - - -> WARNING: Be careful, this options can often cause lock/deadlock within a transaction. diff --git a/docs/pages/api/options-column-expression.md b/docs/pages/api/options-column-expression.md deleted file mode 100644 index 3e3e463..0000000 --- a/docs/pages/api/options-column-expression.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -layout: default -title: Column Expression -permalink: column-expression ---- - -{% include template-h1.html %} - -## Column Expression Options -- [ColumnInputExpression](#columninputexpression) -- [ColumnKeyExpression](#columnkeyexpression) -- [ColumnOutputExpression](#columnoutputexpression) -- [ColumnSynchronizeDeleteKeySubsetExpression](#columnsynchronizedeletekeysubsetexpression) -- [IgnoreOnMergeInsertExpression](#ignoreonmergeinsertexpression) -- [IgnoreOnMergeUpdateExpression](#ignoreonmergeupdatexpression) - -_Coming Soon_ diff --git a/docs/pages/api/options-execute-event.md b/docs/pages/api/options-execute-event.md deleted file mode 100644 index 61fe468..0000000 --- a/docs/pages/api/options-execute-event.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -layout: default -title: Execute Event -permalink: execute-event ---- - -{% include template-h1.html %} -## Excecute Event Options -- [BulkOperationExecuting](#bulkoperationexecuting) -- [BulkOperationExecuted](#bulkoperationexecuted) - -## BulkOperationExecuting -Allow you to change configuration before the bulk operation is executed. - -### Example -{% highlight csharp %} -var bulk = new BulkOperation(connection); - -bulk.BulkOperationExecuting = bulkOperation => { /* configuration */ }; - -bulk.BulkMerge(dt); -{% endhighlight %} - -## BulkOperationExecuted -Allow you to change configuration after the bulk operation is executed. - -### Example -{% highlight csharp %} -var bulk = new BulkOperation(connection); - -bulk.BulkOperationExecuted = bulkOperation => { /* configuration */ }; - -bulk.BulkMerge(dt); -{% endhighlight %} diff --git a/docs/pages/api/options-log.md b/docs/pages/api/options-log.md deleted file mode 100644 index f48af10..0000000 --- a/docs/pages/api/options-log.md +++ /dev/null @@ -1,52 +0,0 @@ ---- -layout: default -title: Log -permalink: log ---- - -{% include template-h1.html %} -## Log Options -- [Log](#log) -- [UseLogDump](#uselogdump) -- [LogDump](#logdump) - -## Log -Allow you to log some event happening in your database. - -### Example -{% highlight csharp %} -StringBuilder logger = new StringBuilder(); -var bulk = new BulkOperation(connection); - -bulk.Log += s => logger.AppendLine(s); - -bulk.BulkMerge(dt); -{% endhighlight %} - -## UseLogDump -Allow you to log in a string (LogDump) event happening in your database. - -### Example -{% highlight csharp %} -var bulk = new BulkOperation(connection); - -bulk.UseLogDump = true; - -bulk.BulkMerge(dt); - -var logDump = bulk.LogDump; -{% endhighlight %} - -## LogDump -Allow you to retrieve event happening in your database when UseLogDump is enabled. - -### Example -{% highlight csharp %} -var bulk = new BulkOperation(connection); - -bulk.UseLogDump = true; - -bulk.BulkMerge(dt); - -var logDump = bulk.LogDump; -{% endhighlight %} diff --git a/docs/pages/api/options-sql-server.md b/docs/pages/api/options-sql-server.md deleted file mode 100644 index 5557d65..0000000 --- a/docs/pages/api/options-sql-server.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -layout: default -title: SQL Server -permalink: sql-server ---- - -{% include template-h1.html %} -## SQL Server Options -- [SqlBulkCopyOptions](#sqlbulkcopyoptions) - -## SqlBulkCopyOptions -Allow you to set the SqlBulkCopyOptions to use when a strategy with the SqlBulkCopy is selected. - -### Example -{% highlight csharp %} -var bulk = new BulkOperation(connection); - -bulk.SqlBulkCopyOptions = SqlBulkCopyOptions.Default | SqlBulkCopyOptions.TableLock; - -bulk.BulkMerge(dt); -{% endhighlight %} diff --git a/docs/pages/api/options-temporary-table.md b/docs/pages/api/options-temporary-table.md deleted file mode 100644 index 6ef5c83..0000000 --- a/docs/pages/api/options-temporary-table.md +++ /dev/null @@ -1,70 +0,0 @@ ---- -layout: default -title: Temporary Table -permalink: temporary-table ---- - -{% include template-h1.html %} -## Temporary Table Options -- [TemporaryTableBatchByTable](#temporarytablebatchbytable) -- [TemporaryTableInsertBatchSize](#temporarytableinsertbatchsize) -- [TemporaryTableMinRecord](#temporarytableminrecord) -- [TemporaryTableUseTableLock](#temporarytableusetablelock) - - - -Customize how and when to use a temporary table instead of inline SQL. - -**Properties:** -## TemporaryTableBatchByTable -Allow you to set the maximum number of batches a temporary table can contain. - -- Default Value: 0 (unlimited) -### Example -{% highlight csharp %} -var bulk = new BulkOperation(connection); - -bulk.TemporaryTableBatchByTable = 5; - -bulk.BulkMerge(dt); -{% endhighlight %} - -## TemporaryTableInsertBatchSize -Allow you to set the number of record by batch to insert in a temporary table. - -- Default Value: 10,000 -### Example -{% highlight csharp %} -var bulk = new BulkOperation(connection); - -bulk.TemporaryTableInsertBatchSize = 1000; - -bulk.BulkMerge(dt); -{% endhighlight %} - -## TemporaryTableMinRecord -Allow you to set the minimum number of records before a temporary table strategy is used. - -- Default Value: 10 -### Example -{% highlight csharp %} -var bulk = new BulkOperation(connection); - -bulk.TemporaryTableMinRecord = 15; - -bulk.BulkMerge(dt); -{% endhighlight %} - -## TemporaryTableUseTableLock -Allow you to lock the temporary table while being populated. - -- Default Value: true - -### Example -{% highlight csharp %} -var bulk = new BulkOperation(connection); - -bulk.TemporaryTableUseTableLock = true; - -bulk.BulkMerge(dt); -{% endhighlight %} diff --git a/docs/pages/api/options-transient-error.md b/docs/pages/api/options-transient-error.md deleted file mode 100644 index 15a4271..0000000 --- a/docs/pages/api/options-transient-error.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -layout: default -title: Transient Error -permalink: transient-error ---- - -{% include template-h1.html %} -## Transient Error Options -- [RetryCount](#retrycount) -- [RetryInterval](#retryinterval) - -## RetryCount -Allow you to set how many time the bulk operation should retry the operation when a transient error occurs. - -### Example - -{% highlight csharp %} -var bulk = new BulkOperation(connection); - -bulk.RetryCount = 3; - -bulk.BulkMerge(dt); -{% endhighlight %} - -## RetryInterval -Allow you to set how many time to wait before trying an operation again when a transient error occurs. - -### Example - -{% highlight csharp %} -var bulk = new BulkOperation(connection); - -bulk.RetryCount = 3; -bulk.RetryInterval = new TimeSpan(100); - -bulk.BulkMerge(dt); -{% endhighlight %} diff --git a/docs/pages/api/update-from-query.md b/docs/pages/api/update-from-query.md deleted file mode 100644 index de217a9..0000000 --- a/docs/pages/api/update-from-query.md +++ /dev/null @@ -1,30 +0,0 @@ ---- -layout: default -title: Update from Query -permalink: update-from-query ---- - -{% include template-h1.html %} - -## Update From Query -Execute an INSERT operation. - -### Example -{% highlight csharp %} -var bulk = new BulkOperation(connection); - -// UPDATE all customers inactive for more than 2 years -bulk.UpdateFromQuery( - c => c.Where(x => x.Actif && x.LastLogin < DateTime.Now.AddYears(-2)), - c => new Customer {Actif = false}); -{% endhighlight %} - -### Performance Benchmarks - -| Operations | 1,000 Entities | 2,000 Entities | 5,000 Entities | -| :-------------- | -------------: | -------------: | -------------: | -| UpdateFromQuery | 1 ms | 1 ms | 1 ms | - -### Support -- SQL Server 2008+ -- SQL Azure diff --git a/docs/pages/articles/articles.md b/docs/pages/articles/articles.md deleted file mode 100644 index f7e6b5f..0000000 --- a/docs/pages/articles/articles.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -layout: default -title: Articles -permalink: articles ---- - -{% include template-h1.html %} - -## Articles - -
    -{% for num in (0..site.data.pages.size) %} - {% if site.data.pages[num].category == page.permalink and site.data.pages[num].url != page.permalink %} -
  • {{ site.data.pages[num].title }}
  • - {% endif %} -{% endfor %} -
diff --git a/docs/pages/articles/benchmark-pitfall.md b/docs/pages/articles/benchmark-pitfall.md deleted file mode 100644 index 1ee9175..0000000 --- a/docs/pages/articles/benchmark-pitfall.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -layout: default -title: Benchmark Pitfall -permalink: benchmark-pitfall ---- - -{% include template-h1.html %} - -_Coming Soon_ diff --git a/docs/pages/articles/ignore-on-merge-insert-expression.md b/docs/pages/articles/ignore-on-merge-insert-expression.md deleted file mode 100644 index f00a590..0000000 --- a/docs/pages/articles/ignore-on-merge-insert-expression.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -layout: default -title: Ignore on Merge Insert Expression -permalink: ignore-on-merge-insert-expression ---- - -{% include template-h1.html %} - -_Coming Soon_ diff --git a/docs/pages/articles/ignore-on-merge-update-expression.md b/docs/pages/articles/ignore-on-merge-update-expression.md deleted file mode 100644 index 8a021e6..0000000 --- a/docs/pages/articles/ignore-on-merge-update-expression.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -layout: default -title: Ignore on Merge Update Expression -permalink: ignore-on-merge-update-expression ---- - -{% include template-h1.html %} - -_Coming Soon_ diff --git a/docs/pages/articles/input-expression.md b/docs/pages/articles/input-expression.md deleted file mode 100644 index f12a674..0000000 --- a/docs/pages/articles/input-expression.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -layout: default -title: Input Expression -permalink: input-expression ---- - -{% include template-h1.html %} - -_Coming Soon_ diff --git a/docs/pages/articles/insert-if-not-exists.md b/docs/pages/articles/insert-if-not-exists.md deleted file mode 100644 index 20e06e2..0000000 --- a/docs/pages/articles/insert-if-not-exists.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -layout: default -title: Insert IF NOT Exists -permalink: insert-if-not-exists ---- - -{% include template-h1.html %} - -_Coming Soon_ diff --git a/docs/pages/articles/insert-keep-identity.md b/docs/pages/articles/insert-keep-identity.md deleted file mode 100644 index a92bcb2..0000000 --- a/docs/pages/articles/insert-keep-identity.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -layout: default -title: Insert Keep Identity -permalink: insert-keep-identity ---- - -{% include template-h1.html %} - -_Coming Soon_ diff --git a/docs/pages/articles/key-expression.md b/docs/pages/articles/key-expression.md deleted file mode 100644 index 729fcfd..0000000 --- a/docs/pages/articles/key-expression.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -layout: default -title: Key Expression -permalink: key-expression ---- - -{% include template-h1.html %} - -_Coming Soon_ diff --git a/docs/pages/articles/output-expression.md b/docs/pages/articles/output-expression.md deleted file mode 100644 index ce3cc0f..0000000 --- a/docs/pages/articles/output-expression.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -layout: default -title: Output Expression -permalink: output-expression ---- - -{% include template-h1.html %} - -_Coming Soon_ diff --git a/docs/pages/articles/synchronize-expression.md b/docs/pages/articles/synchronize-expression.md deleted file mode 100644 index 037ec36..0000000 --- a/docs/pages/articles/synchronize-expression.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -layout: default -title: Synchronize Expression -permalink: synchronize-expression ---- - -{% include template-h1.html %} - -_Coming Soon_ diff --git a/docs/pages/articles/update-duplicate-key.md b/docs/pages/articles/update-duplicate-key.md deleted file mode 100644 index 2142893..0000000 --- a/docs/pages/articles/update-duplicate-key.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -layout: default -title: Update Duplicate Key -permalink: update-duplicate-key ---- - -{% include template-h1.html %} - -_Coming Soon_ diff --git a/docs/pages/articles/update-key-value.md b/docs/pages/articles/update-key-value.md deleted file mode 100644 index fb3e469..0000000 --- a/docs/pages/articles/update-key-value.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -layout: default -title: Update Key Value -permalink: update-key-value ---- - -{% include template-h1.html %} - -_Coming Soon_ diff --git a/docs/pages/faq/contact-us.md b/docs/pages/faq/contact-us.md deleted file mode 100644 index f80f394..0000000 --- a/docs/pages/faq/contact-us.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -layout: default -title: Contact us -permalink: contact-us ---- - -{% include template-h1.html %} - -## I have a question! What should I do? -Contact us directly with your questions: info@zzzprojects.com _(recommended)_ - -You can also use the [Issues Tracker](https://github.com/zzzprojects/EntityFramework-Extensions/issues). - -## I think I've found a bug! What should I do? -Contact us directly with your bug: info@zzzprojects.com _(recommended)_ - -You can also use the [Issues Tracker](https://github.com/zzzprojects/EntityFramework-Extensions/issues). - -## I think I've found a feature! What should I do? -Contact us directly with your feature: info@zzzprojects.com _(recommended)_ - -You can also use the project [Issues Tracker](https://github.com/zzzprojects/EntityFramework-Extensions/issues). - -## I think you forget about my request! What should I do? -We usually get/answer over 20 requests by day. Unfortunately, it's happen! - -Just contact us back again, and we will make sure we don't miss it a second time! diff --git a/docs/pages/faq/faq-general.md b/docs/pages/faq/faq-general.md deleted file mode 100644 index 0cd51ac..0000000 --- a/docs/pages/faq/faq-general.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -layout: default -title: FAQ General -permalink: faq-general ---- - -{% include template-h1.html %} - -## Which Payment method do you support? -We support the following payment method: - -- PayPal -- Check -- Bank Transfer - -## Can I purchase this product from a Reseller? -Yes, just let him know to contact us. - -## What's your average SLA response and resolution times? -We try to provide an outstanding support service. - -We normally answer very fast, often within one hour. - -Most fixes is resolved within one business day. - -## Do you support EF Core -We do not yet. We are currently re-writing the library to support it. diff --git a/docs/pages/faq/faq-installation.md b/docs/pages/faq/faq-installation.md deleted file mode 100644 index 89da575..0000000 --- a/docs/pages/faq/faq-installation.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: default -title: Installation -permalink: faq-installation ---- - -{% include template-h1.html %} - -## How to I Install your product? -It simple, you download it from NuGet and add it to your project. - -More Info: [Tutorials - Installing](installing) - -## I have installed your product, but I don't see your extensions method -- Make sure to install it in the right project -- Make sure your project support .NET40 or better diff --git a/docs/pages/faq/faq-license.md b/docs/pages/faq/faq-license.md deleted file mode 100644 index 1bfdbb5..0000000 --- a/docs/pages/faq/faq-license.md +++ /dev/null @@ -1,80 +0,0 @@ ---- -layout: default -title: License -permalink: faq-license ---- - -{% include template-h1.html %} - -## Developer Seat - -### What's a developer seat? -A developer seat is a developer working for your company and developing code directly with our product. - -You don't have to purchase developer seat for front-end developer or back-end developer which doesn't use our product API. - -Since you buy developer seat, you can develop an unlimited amount of projects within your company. - -### What's the cost for additional developer seat? -The cost for additional developer seat is usually extremely low. We want to make sure our library is accessible for small and large company. - -### Do developer seat are transferable? -Yes, a developer seat can be transferred to any employee within your company. - -## Perpertual License - -### What's a perpetual license? -A perpetual license allows you to use the licensed product indefinitely. - -### Even when my Support & Upgrade is expired? -Yes. - -## Support & Upgdrade - -### My support & upgrade have expired! What will happen? -Don't worry. Your product continue to work forever! - -You can still download and use any version released before the support & upgrade expiration date. - -You will need to renew to use version released after the support & upgrade expiration date. - -### How do I renew my License? -We usually start to send renewal mail two months before the support & upgrade expiration date. - -If you didn't receive such email, you could contact us directly: info@zzzprojects.com - -### Can I have renewal discount? -We provide a 25% discount to early renewal. So anyone renewing before the support & upgrade expiration date automatically get a renewal discount. - -### I'm too late for early renewal discount! What can I do? -If you are few day late, we still provide early renewal discount. - -However, if you have few months late, you will need to purchase the library again. - -The best way to find out if you still have access to early renewal discount is by contacting us: info@zzzprojects.com - -### Why should I renew? -Renewing your support & upgrade give the following benefits: - -- Major version releases and new product features -- Fast support by mail -- Protection against price increases during the maintenance term - -## Royalty Free - -### Can I install Entity Framework Extensions on Client Machine? -Yes, the product is royalty free. - -That mean, you paid for developer seat, but customer using your product doesn't have to pay. - -### Is Entity Framework Extensions Royalty Free? -Yes, the product is royalty free. - -This mean, you can develop a project and install it on thousands of clients. - -You paid for developer seat within your company. - -Some standard royalty free limitations: - -- You can sell a similar product and claim it's yours. -- If your customer has access to your source code and develops using our API, they will have to purchase a license. diff --git a/docs/pages/faq/faq.md b/docs/pages/faq/faq.md deleted file mode 100644 index 02e2ad1..0000000 --- a/docs/pages/faq/faq.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -layout: default -title: FAQ -permalink: faq ---- - -{% include template-h1.html %} - -## FAQ - -
    -{% for num in (0..site.data.pages.size) %} - {% if site.data.pages[num].category == page.permalink and site.data.pages[num].url != page.permalink %} -
  • {{ site.data.pages[num].title }}
  • - {% endif %} -{% endfor %} -
diff --git a/docs/pages/faq/issue-tracker.md b/docs/pages/faq/issue-tracker.md deleted file mode 100644 index b1962b9..0000000 --- a/docs/pages/faq/issue-tracker.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -layout: default -title: Issue Tracker -permalink: issue-tracker ---- - -{% include template-h1.html %} - -## Where is your Issue Tracker? - -While we prefer to be contacted directly: info@zzzprojects.com - -We understand some people prefer to have an online issue tracker to follow and comment their issues. - -You can create issue here: - -- [Issue Tracker](https://github.com/zzzprojects/EntityFramework-Extensions/issues) diff --git a/docs/pages/faq/trial.md b/docs/pages/faq/trial.md deleted file mode 100644 index 8c73d61..0000000 --- a/docs/pages/faq/trial.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -layout: default -title: Trial -permalink: trial ---- - -{% include template-h1.html %} - - -Oops! Your trial has expired. - -### How can I extend my trial? -You can extend your trial for several months by downloading the latest version at the beginning of every month. - - - - Download - - - -### Where is the free version? -There is no free version. - -### How can I purchase a license? -A perpetual license can be purchased from here: Buy \ No newline at end of file diff --git a/docs/pages/troubleshooting/md5-exception.md b/docs/pages/troubleshooting/md5-exception.md deleted file mode 100644 index f15e65f..0000000 --- a/docs/pages/troubleshooting/md5-exception.md +++ /dev/null @@ -1,31 +0,0 @@ ---- -layout: default -title: MD5 Exception -permalink: md5-exception ---- - -{% include template-h1.html %} - -## Problem - -You execute a method from the Entity Framework Extensions library, and the following error is thrown: - -{% include template-exception.html message='This implementation is not part of the Windows Platform FIPS validated cryptographic algorithms.' %} - -## Solution - -### Cause - -The default algorithm to validate the license key & name is not supported with FIPS enabled. - -### Fix - -#### Ask for a compatible key - -Contact us and we will send you a new key supporting FIPS: {% include infozzzprojects-email.html %} - -Why don’t we generated key compatible with FIPS by default? Because it will not be supported for a client machine with Windows XP or below. - -#### Disable FIPS - -Article: [Disable FIPS](http://docs.trendmicro.com/all/ent/sc/v3.0/en-US/cmcolh/t_fips.html){:target="_blank"} diff --git a/docs/pages/troubleshooting/trial-period-expired-exception.md b/docs/pages/troubleshooting/trial-period-expired-exception.md deleted file mode 100644 index 7c9780e..0000000 --- a/docs/pages/troubleshooting/trial-period-expired-exception.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -layout: default -title: Trial Period Expired Exception -permalink: trial-period-expired-exception ---- - -{% include template-h1.html %} - -## Problem - -You execute a method from the Entity Framework Extensions library, and the following error is thrown: - -{% include template-exception.html message='ERROR_005: The monthly trial period is expired. You can extend your trial by downloading the latest version. You can also purchase a perpetual license on our website. If you already own this license, this error only appears if the license has not been found, you can find additional information on our troubleshooting section (http://entityframework-extensions.net/troubleshooting). Contact our support team for more details: info@zzzprojects.com' %} - -## Solution - -### Cause - -- You are currently evaluating the library and the trial period is expired. -- You have purchased the license but didn't register it correctly. - -### Fix - -#### Trial Period Expired - -You can extend your trial by downloading the latest version: [Upgrading](http://entityframework-extensions.net/upgrading) - -The latest version always contains a trial for the current month to allow a company to evaluate our library for several months. - -#### License Badly Registered - -Make sure to follow all recommendation about how to setup your license: [Licensing](http://entityframework-extensions.net/licensing) - -Otherwise contact us: {% include infozzzprojects-email.html %} diff --git a/docs/pages/troubleshooting/troubleshooting.md b/docs/pages/troubleshooting/troubleshooting.md deleted file mode 100644 index 3962bd3..0000000 --- a/docs/pages/troubleshooting/troubleshooting.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -layout: default -title: Troubleshooting -permalink: troubleshooting ---- - -{% include template-h1.html %} - -## Troubleshooting - -
    -{% for num in (0..site.data.pages.size) %} - {% if site.data.pages[num].category == page.permalink and site.data.pages[num].url != page.permalink %} -
  • {{ site.data.pages[num].title }}
  • - {% endif %} -{% endfor %} -
diff --git a/docs/pages/tutorials.md b/docs/pages/tutorials.md deleted file mode 100644 index c7fdc72..0000000 --- a/docs/pages/tutorials.md +++ /dev/null @@ -1,67 +0,0 @@ ---- -layout: default -title: Tutorials -permalink: tutorials ---- - -{% include template-h1.html %} - -
- -
-
-
-

Tutorial

-

Bulk Tutotrial

-
-

Start learning about how to use .NET Bulk Operations with our tutorial.

-

- Learn more -

-
-
-
-
-

API

-

Application Program Interface

-
-

Start learning the common API of .NET Bulk Operations, and everything around it.

-

- Learn more -

-
-
-
-
-

Articles

-

How/What/Why Articles

-
-

Start learning how to use .NET Bulk Operations throught articles.

-

- Learn more -

-
-
-
-
-

FAQ

-

Freqently Answered Question

-
-

Start learning .NET Bulk Operations best practices and solution to the common problem you may encounter.

-

- Learn more -

-
-
-
-
-

Exception

-

Exception & Troubleshooting

-
-

Start learning how to fix and handle some exception and common troubleshooting error.

-

- Learn more -

-
-
-
diff --git a/docs/pages/tutorials/installing.md b/docs/pages/tutorials/installing.md deleted file mode 100644 index 00a525d..0000000 --- a/docs/pages/tutorials/installing.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -layout: default -title: Installing -permalink: installing ---- - -{% include template-h1.html %} - -## Installing -Is it the first time you use our Library? - -Don't worry. People love our library because it's so easy to use. - - -## Step 1 - NuGet Download - -.NET Bulk Operations library is only available through NuGet - -download - - -> PM> Install-Package Z.BulkOperations - -## Step 2 - Have Fun! diff --git a/docs/pages/tutorials/licensing.md b/docs/pages/tutorials/licensing.md deleted file mode 100644 index 6eaf418..0000000 --- a/docs/pages/tutorials/licensing.md +++ /dev/null @@ -1,67 +0,0 @@ ---- -layout: default -title: Licensing -permalink: licensing ---- - -{% include template-h1.html %} - -## Evaluation Period -You can evaluate our library for several months before purchasing it. - -The trial period stops at the end of the month. When you receive a license expiration error, download the latest version which will automatically extend your trial period. - -You can also purchase the library [here](http://bulk-operations.net/#pricing) - -Upon purchase, you will receive a license name and a license key. - -## Setup License from config file -The license name and key can be directly added in the app.config or web.config file in the appSettings section. - -{% include template-example.html %} -{% highlight csharp %} - - - - -{% endhighlight %} - -## Setup License from code -You can also set the license name and key directly in the code. - -{% include template-example.html %} -{% highlight csharp %} -// using Z.BulkOperations; // Don't forget to include this. - -string licenseName = //... PRO license name -string licenseKey = //... PRO license key - -Z.BulkOperations.LicenseManager.AddLicense(licenseName, licenseKey); -{% endhighlight %} - -### Recommendation -- Use the config file to store your license name and license key. -- **Web App:** Use Application_Start in global.asax to activate your license. -- **WinForm App:** Use the main thread method to activate your license. -- **Win Service:** Use the OnStart method to activate your license - -> The AddLicense must be set before the first call to the library. Otherwise, you will start the evaluation period - -## How can I check if my license is valid? -The validate method allow you to know whether your license is valid or not. -{% include template-example.html %} -{% highlight csharp %} -// CHECK for default provider (SQL Server) -string licenseErrorMessage; -if (!Z.BulkOperations.LicenseManager.LicenseManager.ValidateLicense(out licenseErrorMessage)) -{ - throw new Exception(licenseErrorMessage); -} - -// CHECK for a specific provider -string licenseErrorMessage; -if (!Z.BulkOperations.LicenseManager.LicenseManager.ValidateLicense(out licenseErrorMessage, ProviderType.MySql)) -{ - throw new Exception(licenseErrorMessage); -} -{% endhighlight %} diff --git a/docs/pages/tutorials/overview.md b/docs/pages/tutorials/overview.md deleted file mode 100644 index 4b648f7..0000000 --- a/docs/pages/tutorials/overview.md +++ /dev/null @@ -1,71 +0,0 @@ ---- -layout: default -title: Overview -permalink: overview ---- - -{% include template-h1.html %} - -## What's Bulk Operations library? - -Like SqlBulkCopy, it allows you to perform very fast insertion in an SQL Server. - -Unlike SqlBulkCopy, it supports all kind of operations: - -- Bulk Insert -- Bulk Update -- Bulk Delete -- Bulk Merge -- Bulk SaveChanges -- Bulk Synchronize - -And many providers: - -- SQL Server 2008+ -- SQL Azure -- SQL Compact -- Oracle -- MySQL -- PostgreSQL -- SQLite - -It’s easy to use, and easy to customize. - -{% include template-example.html %} - -{% highlight csharp %} -// Easy to use -var bulk = new BulkOperation(connection); -bulk.BulkInsert(dt); -bulk.BulkUpdate(dt); -bulk.BulkDelete(dt); -bulk.BulkMerge(dt); - -// Easy to customize -var bulk = new BulkOperation(connection); -bulk.BatchSize = 1000; -bulk.ColumnInputExpression = c => new { c.Name, c.FirstName }; -bulk.ColumnOutputExpression = c => c.CustomerID; -bulk.ColumnPrimaryKeyExpression = c => c.Code; -bulk.BulkMerge(customers); -{% endhighlight %} - -### Is it that simple? - -Yes, - -That’s why people fall in love so quickly with our library. - -### Who use it? - -Already **thousands** of companies of all sizes and kinds use it: - -- From start-up company with one developer -- To fortune 100 companies with hundreds of developers - -Are you still not using it? Give it one try, and you will understand why they choose our library. - -Under the hood, some of our libraries also use it: - -- [Entity Framework Extensions](http://entityframework-extensions.net/) -- [Dapper Plus](http://dapper-plus.net/) diff --git a/docs/pages/tutorials/requirements.md b/docs/pages/tutorials/requirements.md deleted file mode 100644 index eb43d63..0000000 --- a/docs/pages/tutorials/requirements.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -layout: default -title: Requirements -permalink: requirements ---- - -{% include template-h1.html %} - -## Requirements - -### .NET Framework Version - -- .NET Framework 4.0 or greater - -### Database Provider - -- SQL Server 2008+ -- SQL Azure -- SQL Compact -- Oracle -- MySQL -- PostgreSQL -- SQLite - -### Note - -- .NET Core is under development diff --git a/docs/pages/tutorials/tutorial-bulk-generic-methods.md b/docs/pages/tutorials/tutorial-bulk-generic-methods.md deleted file mode 100644 index 4d894fb..0000000 --- a/docs/pages/tutorials/tutorial-bulk-generic-methods.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -layout: default -title: Bulk Generic Methods -permalink: tutorial-bulk-generic-methods ---- - -{% include template-h1.html %} - -## Introduction -Bulk Generic Methods allow you to work with strongly type expression. - -| Name | Description | -| :-------------- | :------------- | -| BulkInsert | Execute an INSERT operation. | -| BulkUpdate | Execute an UPDATE operation. | -| BulkDelete | Execute a DELETE operation. | -| BulkMerge | Execute a MERGE/UPSERT operation. UPDATE existing rows matching the key, and INSERT new rows. | -| BulkSynchronize | Execute a SYNCHRONIZE operation. UPDATE existing rows matching the key, INSERT new rows and DELETE records from the destination not existing in the source. | - -### Example - -{% highlight csharp %} -var list = new List(); -// ...seed... - -var bulk = new BulkOperation(connection); - -// Easy to customize -bulk.BatchSize = 1000; -bulk.ColumnInputExpression = c => new { c.Name, c.FirstName }; -bulk.ColumnOutputExpression = c => c.CustomerID; -bulk.ColumnPrimaryKeyExpression = c => c.Code; - -// Easy to use -bulk.BulkInsert(customers); -bulk.BulkUpdate(customers); -bulk.BulkDelete(customers); -bulk.BulkMerge(customers); - -{% endhighlight %} - -### Performance Benchmark - -| Operations | 1,000 Rows | 10,000 Rows | 100,000 Rows | 1,000,000 Rows | -| :-------------- | -------------: | -------------: | -------------: | -------------: | -| BulkInsert | 6 ms | 25 ms | 200 ms | 2,000 ms | -| BulkUpdate | 50 ms | 80 ms | 575 ms | 6,500 ms | -| BulkDelete | 45 ms | 70 ms | 625 ms | 6,800 ms | -| BulkMerge | 65 ms | 160 ms | 1200 ms | 12,000 ms | - diff --git a/docs/pages/tutorials/tutorial-bulk-methods.md b/docs/pages/tutorials/tutorial-bulk-methods.md deleted file mode 100644 index dd64adc..0000000 --- a/docs/pages/tutorials/tutorial-bulk-methods.md +++ /dev/null @@ -1,47 +0,0 @@ ---- -layout: default -title: Bulk Methods -permalink: tutorial-bulk-methods ---- - -{% include template-h1.html %} - -## Introduction -The .NET Bulk Operations library allow you to perform all operations in your database. - -| Name | Description | -| :-------------- | :------------- | -| BulkInsert | Execute an INSERT operation. | -| BulkUpdate | Execute an UPDATE operation. | -| BulkDelete | Execute a DELETE operation. | -| BulkMerge | Execute a MERGE/UPSERT operation. UPDATE existing rows matching the key, and INSERT new rows. | -| BulkSaveChanges | Execute an INSERT/UPDATE/DELETE operation using the DataRowState of the DataTable. | -| BulkSynchronize | Execute a SYNCHRONIZE operation. UPDATE existing rows matching the key, INSERT new rows and DELETE records from the destination not existing in the source. | - -### Example - -{% highlight csharp %} -var dt = new DataTable(); -// ...seed... - -var bulk = new BulkOperation(connection); - -// Easy to customize -bulk.BatchSize = 1000; - -// Easy to use -bulk.BulkInsert(dt); -bulk.BulkUpdate(dt); -bulk.BulkDelete(dt); -bulk.BulkMerge(dt); - -{% endhighlight %} - -### Performance Benchmark - -| Operations | 1,000 Rows | 10,000 Rows | 100,000 Rows | 1,000,000 Rows | -| :-------------- | -------------: | -------------: | -------------: | -------------: | -| BulkInsert | 6 ms | 25 ms | 200 ms | 2,000 ms | -| BulkUpdate | 50 ms | 80 ms | 575 ms | 6,500 ms | -| BulkDelete | 45 ms | 70 ms | 625 ms | 6,800 ms | -| BulkMerge | 65 ms | 160 ms | 1200 ms | 12,000 ms | diff --git a/docs/pages/tutorials/tutorial-from-query-methods.md b/docs/pages/tutorials/tutorial-from-query-methods.md deleted file mode 100644 index a457a99..0000000 --- a/docs/pages/tutorials/tutorial-from-query-methods.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -layout: default -title: From Query Methods -permalink: tutorial-from-query-methods ---- - -{% include template-h1.html %} - -## Introduction -FromQuery operations allow you to use LINQ Query to execute an operation directly in the database - -| Name | Description | -| :-------------- | :------------- | -| DeleteFromQuery | Execute a DELETE operation using a LINQ Query. | -| UpdateFromQuery | Execute an UPDATE operation using a LINQ Query. | - - - -### Example -{% highlight csharp %} -var bulk = new BulkOperation(connection); - -// DELETE all customers inactive for more than 2 years -bulk.DeleteFromQuery( - c => c.Where(x => x.LastLogin < DateTime.Now.AddYears(-2))); - -// UPDATE all customers inactive for more than 2 years -bulk.UpdateFromQuery( - c => c.Where(x => x.Actif && x.LastLogin < DateTime.Now.AddYears(-2)), - c => new Customer {Actif = false}); -{% endhighlight %} - - -### Performance Benchmarks - -| Operations | 1,000 Entities | 2,000 Entities | 5,000 Entities | -| :-------------- | -------------: | -------------: | -------------: | -| DeleteFromQuery | 1 ms | 1 ms | 1 ms | -| UpdateFromQuery | 1 ms | 1 ms | 1 ms | - -### Support -- SQL Server 2008+ -- SQL Azure diff --git a/docs/pages/tutorials/upgrading.md b/docs/pages/tutorials/upgrading.md deleted file mode 100644 index d879477..0000000 --- a/docs/pages/tutorials/upgrading.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -layout: default -title: Upgrading -permalink: upgrading ---- - -{% include template-h1.html %} - -## Upgrading - -All our releases are normally backward compatible to make it very easy for you to upgrade. - -## Step 1 - Before Upgrading -Before upgrading: -- Make sure to read [release notes](https://github.com/zzzprojects/Bulk-Operations/releases) -- **NEVER** upgrade to production without testing in a development environment first - -## Step 2 - NuGet Download - -.NET Bulk Operations library is only available through NuGet - -download - - -> PM> Install-Package Z.BulkOperations diff --git a/docs/robots.txt b/docs/robots.txt deleted file mode 100644 index eede9dd..0000000 --- a/docs/robots.txt +++ /dev/null @@ -1,6 +0,0 @@ -# www.robotstxt.org/ - -# Allow crawling of all content -User-agent: * -Disallow: -Sitemap: http://bulk-operations.net/sitemap.xml diff --git a/docs2/pages/_topnav.md b/docs2/pages/_topnav.md deleted file mode 100644 index 20e1a3d..0000000 --- a/docs2/pages/_topnav.md +++ /dev/null @@ -1,5 +0,0 @@ -- [Getting Started](getting-started/overview.md) -- Documentation - - [Documentation](documentations/bulk-insert.md) - - [Release Notes](https://github.com/zzzprojects/Bulk-Operations/releases) -- [Online Examples](/online-examples) diff --git a/docs2/pages/articles/articles.md b/docs2/pages/articles/articles.md deleted file mode 100644 index 52b9bf3..0000000 --- a/docs2/pages/articles/articles.md +++ /dev/null @@ -1,11 +0,0 @@ -# Articles - -## Articles - -
    -{% for num in (0..site.data.pages.size) %} - {% if site.data.pages[num].category == page.permalink and site.data.pages[num].url != page.permalink %} -
  • {{ site.data.pages[num].title }}
  • - {% endif %} -{% endfor %} -
diff --git a/docs2/pages/articles/benchmark-pitfall.md b/docs2/pages/articles/benchmark-pitfall.md deleted file mode 100644 index 6b4b3a4..0000000 --- a/docs2/pages/articles/benchmark-pitfall.md +++ /dev/null @@ -1,2 +0,0 @@ -# Benchmark Pitfall -_Coming Soon_ diff --git a/docs2/pages/articles/ignore-on-merge-insert-expression.md b/docs2/pages/articles/ignore-on-merge-insert-expression.md deleted file mode 100644 index 2ad6a0f..0000000 --- a/docs2/pages/articles/ignore-on-merge-insert-expression.md +++ /dev/null @@ -1,3 +0,0 @@ -# Ignore on Merge Insert Expression - -_Coming Soon_ diff --git a/docs2/pages/articles/ignore-on-merge-update-expression.md b/docs2/pages/articles/ignore-on-merge-update-expression.md deleted file mode 100644 index ce1fe5c..0000000 --- a/docs2/pages/articles/ignore-on-merge-update-expression.md +++ /dev/null @@ -1,3 +0,0 @@ -# Ignore on Merge Update Expression - -_Coming Soon_ diff --git a/docs2/pages/articles/input-expression.md b/docs2/pages/articles/input-expression.md deleted file mode 100644 index 1d018ed..0000000 --- a/docs2/pages/articles/input-expression.md +++ /dev/null @@ -1,3 +0,0 @@ -# Input Expression - -_Coming Soon_ diff --git a/docs2/pages/articles/insert-if-not-exists.md b/docs2/pages/articles/insert-if-not-exists.md deleted file mode 100644 index 0a9ef2e..0000000 --- a/docs2/pages/articles/insert-if-not-exists.md +++ /dev/null @@ -1,3 +0,0 @@ -# Insert IF NOT Exists - -_Coming Soon_ diff --git a/docs2/pages/articles/insert-keep-identity.md b/docs2/pages/articles/insert-keep-identity.md deleted file mode 100644 index e05143c..0000000 --- a/docs2/pages/articles/insert-keep-identity.md +++ /dev/null @@ -1,2 +0,0 @@ -# Insert Keep Identity -_Coming Soon_ diff --git a/docs2/pages/articles/key-expression.md b/docs2/pages/articles/key-expression.md deleted file mode 100644 index b75686b..0000000 --- a/docs2/pages/articles/key-expression.md +++ /dev/null @@ -1,3 +0,0 @@ -# Key Expression - -_Coming Soon_ diff --git a/docs2/pages/articles/output-expression.md b/docs2/pages/articles/output-expression.md deleted file mode 100644 index 0c6c607..0000000 --- a/docs2/pages/articles/output-expression.md +++ /dev/null @@ -1,2 +0,0 @@ -# Output Expression -_Coming Soon_ diff --git a/docs2/pages/articles/synchronize-expression.md b/docs2/pages/articles/synchronize-expression.md deleted file mode 100644 index 0b1b3b9..0000000 --- a/docs2/pages/articles/synchronize-expression.md +++ /dev/null @@ -1,3 +0,0 @@ -# Synchronize Expression - -_Coming Soon_ diff --git a/docs2/pages/articles/update-duplicate-key.md b/docs2/pages/articles/update-duplicate-key.md deleted file mode 100644 index 281f785..0000000 --- a/docs2/pages/articles/update-duplicate-key.md +++ /dev/null @@ -1,3 +0,0 @@ -# Update Duplicate Key - -_Coming Soon_ diff --git a/docs2/pages/articles/update-key-value.md b/docs2/pages/articles/update-key-value.md deleted file mode 100644 index 063d274..0000000 --- a/docs2/pages/articles/update-key-value.md +++ /dev/null @@ -1,3 +0,0 @@ -# Update Key Value - -_Coming Soon_ diff --git a/docs2/pages/documentations/_sidebar.md b/docs2/pages/documentations/_sidebar.md deleted file mode 100644 index 1d97b63..0000000 --- a/docs2/pages/documentations/_sidebar.md +++ /dev/null @@ -1,22 +0,0 @@ -- Bulk Operations - - [Bulk Insert](bulk-insert.md) - - [Bulk Update](bulk-update.md) - - [Bulk Delete](bulk-delete.md) - - [Bulk Merge](bulk-merge.md) - - [Bulk SaveChanges](bulk-savechanges.md) - - [Bulk Synchronize](bulk-synchronize.md) -- FromQuery Operations - - [Update from Query](update-from-query.md) - - [Delete from Query](delete-from-query.md) -- C# Eval Expression - - [LINQ Dynamic](eval-expressions/linq-dynamic.md) - - [Eval.Compile](eval-expressions/eval-compile.md) - - [Eval.Execute](eval-expressions/eval-execute.md) -- Options - - [Audit](options-audit.md) - - [Batch](options-batch.md) - - [Execute Event](options-execute-event.md) - - [Log](options-log.md) - - [Temporary Table](options-temporary-table.md) - - [Transient Error](options-transient-error.md) - - [SQL Server](options-sql-server.md) diff --git a/docs2/pages/documentations/api.md b/docs2/pages/documentations/api.md deleted file mode 100644 index 4079d01..0000000 --- a/docs2/pages/documentations/api.md +++ /dev/null @@ -1,11 +0,0 @@ -# API - -## API - -
    -{% for num in (0..site.data.pages.size) %} - {% if site.data.pages[num].category == page.permalink and site.data.pages[num].url != page.permalink %} -
  • {{ site.data.pages[num].title }}
  • - {% endif %} -{% endfor %} -
diff --git a/docs2/pages/documentations/bulk-delete.md b/docs2/pages/documentations/bulk-delete.md deleted file mode 100644 index e365700..0000000 --- a/docs2/pages/documentations/bulk-delete.md +++ /dev/null @@ -1,116 +0,0 @@ -# Bulk Delete - -## Description - -The `BulkDelete` method let you delete a large number of entities in your database. - -```csharp -// Easy to use -bulk.DestinationTableName = "Customers"; -bulk.BulkDelete(customers); - -// Easy to customize -bulk.DestinationTableName = "Customers"; -bulk.BatchSize = 100; -bulk.BulkDelete(customers); -``` -[Try it (DataTable)](https://dotnetfiddle.net/XgKaqz) - -[Try it (Entity)](https://dotnetfiddle.net/O3jY32) - - -### Performance View - -| Operations | 1,000 Entities | 2,000 Entities | 5,000 Entities | -| :-------------- | -------------: | -------------: | -------------: | -| BulkDelete | 50 ms | 55 ms | 75 ms | - - -[Try it (DataTable)](https://dotnetfiddle.net/TknFpT) - -[Try it (Entity)](https://dotnetfiddle.net/CzSZx8) - -> HINT: A lot of factors might affect the benchmark time such as index, column type, latency, throttling, etc. - -### Scenarios -The `BulkDelete` method is **fast** but also **flexible** to let you handle various scenarios such as: - -- [Delete with custom key](#delete-with-custom-key) -- [More scenarios](#more-scenarios) - -### Advantages -- Easy to use -- Flexible -- Increase performance -- Increase application responsiveness - -## Getting Started - -### Bulk Delete -The `BulkDelete` and `BulkDeleteAync` methods your let you delete a large number of entities in your database. - -```csharp -bulk.BulkDelete(customers); - -bulk.BulkDeleteAsync(customers, cancellationToken); -``` -[Try it (DataTable)](https://dotnetfiddle.net/Ss93gv) - -[Try it (Entity)](https://dotnetfiddle.net/p8dt0G) - -### Bulk Delete with options -The `options` parameter let you use a lambda expression to customize the way entities are deleted. - -```csharp -bulk.BatchSize = 100; -bulk.BulkDelete(customers); -``` -[Try it (DataTable)](https://dotnetfiddle.net/NQlmua) - -[Try it (Entity)](https://dotnetfiddle.net/KLFfCw) - -## Real Life Scenarios - -### Delete with custom key -You want to delete entities, but you don't have the primary key. The `ColumnPrimaryKeyExpression` let you use as a key any property or combination of properties. - -```csharp -bulk.AutoMapKeyName = "Code"; -bulk.BulkDelete(dtCustomers.AsEnumerable().Take(2)); -``` -[Try it (DataTable)](https://dotnetfiddle.net/XKUBto) - -```csharp -bulk.AutoMapKeyExpression = customer => customer.Code; -bulk.BulkDelete(customers.Take(2)); -``` -[Try it (Entity)](https://dotnetfiddle.net/yc5tqc) - -### More scenarios -Hundred of scenarios has been solved and are now supported. - -The best way to ask for a special request or to find out if a solution for your scenario already exists is by contacting us: -info@zzzprojects.com - -## Documentation - -### BulkDelete - -###### Methods - -| Name | Description | Example (DataTable) | Example (Entity) | -| :--- | :---------- | :------ | :------ | -| `BulkDelete(items)` | Bulk delete entities in your database. | [Try it](https://dotnetfiddle.net/srOJJ8) | [Try it](https://dotnetfiddle.net/a6Txdy) | -| `BulkDeleteAsync(items)` | Bulk delete entities asynchronously in your database. | | | -| `BulkDeleteAsync(items, cancellationToken)` | Bulk delete entities asynchronously in your database. | | | - -###### Options -More options can be found here: - -- [Audit](https://bulk-operations.net/audit) -- [Batch](https://bulk-operations.net/batch) -- [Execute Event](https://bulk-operations.net/execute-event) -- [Log](https://bulk-operations.net/log) -- [Temporary Table](https://bulk-operations.net/temporary-table) -- [Transient Error](https://bulk-operations.net/transient-error) -- [SQL Server](https://bulk-operations.net/sql-server) diff --git a/docs2/pages/documentations/bulk-insert.md b/docs2/pages/documentations/bulk-insert.md deleted file mode 100644 index e3d2ae1..0000000 --- a/docs2/pages/documentations/bulk-insert.md +++ /dev/null @@ -1,189 +0,0 @@ -# Bulk Insert - -## Description - -The `BulkInsert` method let you insert a large number of entities in your database. - -```csharp -// Easy to use -bulk.DestinationTableName = "Customers"; -bulk.BulkInsert(customers); - -// Easy to customize -bulk.DestinationTableName = "Customers"; -bulk.InsertIfNotExists = true; -bulk.AutoMapOutputIdentity = true; -bulk.BulkInsert(customers); -``` - -[Try it (DataTable)](https://dotnetfiddle.net/UtvblA) - -[Try it (Entity)](https://dotnetfiddle.net/Nm4Ndu) - - -### Performance View - -| Operations | 1,000 Entities | 2,000 Entities | 5,000 Entities | -| :-------------- | -------------: | -------------: | -------------: | -| BulkInsert | 50 ms | 55 ms | 75 ms | - -[Try this benchmark online (DataTable)](https://dotnetfiddle.net/op4qjQ) - -[Try this benchmark online (Entity)](https://dotnetfiddle.net/cHdVFF) - -> HINT: A lot of factors might affect the benchmark time such as index, column type, latency, throttling, etc. - -### Scenarios -The `BulkInsert` method is **fast** but also **flexible** to let you handle various scenarios such as: -- [Insert and keep identity value](#insert-and-keep-identity-value) -- [Insert and include/exclude properties](#insert-and-includeexclude-properties) -- [Insert only if the entity not already exists](#insert-only-if-the-entity-not-already-exists) -- [Insert with returning identity value](#insert-with-returning-identity-value) -- [More scenarios](#more-scenarios) - -### Advantages -- Easy to use -- Flexible -- Increase performance -- Increase application responsiveness - -## Getting Started - -### Bulk Insert -The `BulkInsert` and `BulkInsertAync` let you insert a large number of entities in your database. - -```csharp -bulk.BulkInsert(customers); - -bulk.BulkInsertAsync(customers, cancellationToken); -``` -[Try it (DataTable)](https://dotnetfiddle.net/V7BSkx) - -[Try it (Entity)](https://dotnetfiddle.net/ltMk9u) - -### Bulk Insert with options -The `options` parameter let you customize the way entities are inserted. - -```csharp -bulk.BatchSize = 100; -bulk.BulkInsert(customers); - -bulk.PrimaryKeyExpression = customer => customer.Code; -bulk.InsertIfNotExists = true; -bulk.BulkInsert(customers); -``` -[Try it (DataTable)](https://dotnetfiddle.net/C8kAfL) - -[Try it (Entity)](https://dotnetfiddle.net/YzSPKX) - -## Real Life Scenarios - -### Insert and keep identity value -Your entity has an identity property, but you want to force to insert a specific value instead. The `InsertKeepIdentity` option allows you to keep the identity value of your entity. - -```csharp -bulk.DestinationTableName = "Customers"; -bulk.InsertKeepIdentity = true; -bulk.BulkInsert(customers); -``` -[Try it (DataTable)](https://dotnetfiddle.net/GwWGpY) - -[Try it (Entity)](https://dotnetfiddle.net/04NuC3) - -### Insert and include/exclude properties - -You want to insert your entities but only for specific properties. - -- `ColumnInputExpression`: This option let you choose which properties to map. -- `IgnoreOnInsertExpression`: This option let you ignore properties that are auto-mapped. - -```csharp -bulk.ColumnInputExpression = c => new { c.CustomerID, c.Name}; -bulk.BulkInsert(customers); - -bulk.IgnoreOnInsertExpression = c => new { c.ColumnToIgnore }; -bulk.BulkInsert(customers); -``` -[Try it (DataTable)](https://dotnetfiddle.net/xS44Il) - -[Try it (Entity)](https://dotnetfiddle.net/obTRqp) - -### Insert only if the entity not already exists -You want to insert entities but only those that don't already exist in the database. - -- `InsertIfNotExists`: This option let you insert only entity that doesn't already exists. -- `PrimaryKeyExpression`: This option let you customize the key to use to check if the entity already exists or not. This option disable the Auto Mapping. -- `AutoMapKeyExpression`: This option let you customize the key with an expression and keep the Auto Mapping. -- `AutoMapKeyName`: This option let you customize the key by names and keep the Auto Mapping. - -```csharp -bulk.InsertIfNotExists = true; -bulk.AutoMapKeyExpression = c => c.Code; -bulk.BulkInsert(customers); -``` -[Try it (Entity)](https://dotnetfiddle.net/DLMhLv) - -```csharp -bulk.InsertIfNotExists = true; -bulk.AutoMapKeyName = "Code"; -bulk.BulkInsert(customers); -``` -[Try it (DataTable)](https://dotnetfiddle.net/waYK0E) - - -### Insert related child entities -You want to insert related child entities. - -```csharp -bulk.AutoMapOutputIdentity = true; -bulk.BulkInsert(invoices); - -// SET foreign key value -invoices.ForEach(x => x.Items.ForEach(y => y.InvoiceID = x.InvoiceID)); -bulk.BulkInsert(invoices.SelectMany(x => x.Items).ToList()); -``` -[Try it (Entity)](https://dotnetfiddle.net/9REv9u) - -[Try it (DataTable)](https://dotnetfiddle.net/zDdjQm) - -### Insert with returning identity value -By default, the `BulkInsert` method doesn't returns the identity when inserting. - -You can return the identity by specifying it should be returned. - -```csharp -bulk.AutoMapOutputIdentity = true; -bulk.BulkInsert(customers); -``` -[Try it (DataTable)](https://dotnetfiddle.net/g5pSS1) - -[Try it (Entity)](https://dotnetfiddle.net/klt6MY) - -### More scenarios -Hundred of scenarios has been solved and are now supported. - -The best way to ask for a special request or to find out if a solution for your scenario already exists is by contacting us: -info@zzzprojects.com - -## Documentation - -### BulkInsert - -###### Methods - -| Name | Description | Example (DataTable) | Example (Entity) | -| :--- | :---------- | :------ | :------ | -| `BulkInsert(items)` | Bulk insert entities in your database. | [Try it](https://dotnetfiddle.net/ikjsmq) | [Try it](https://dotnetfiddle.net/oz7CCC) | -| `BulkInsertAsync(items)` | Bulk insert entities asynchronously in your database. | | -| `BulkInsertAsync(items, cancellationToken)` | Bulk insert entities asynchronously in your database. | | - -###### Options -More options can be found here: - -- [Audit](https://bulk-operations.net/audit) -- [Batch](https://bulk-operations.net/batch) -- [Execute Event](https://bulk-operations.net/execute-event) -- [Log](https://bulk-operations.net/log) -- [Temporary Table](https://bulk-operations.net/temporary-table) -- [Transient Error](https://bulk-operations.net/transient-error) -- [SQL Server](https://bulk-operations.net/sql-server) diff --git a/docs2/pages/documentations/bulk-merge.md b/docs2/pages/documentations/bulk-merge.md deleted file mode 100644 index 936fbb0..0000000 --- a/docs2/pages/documentations/bulk-merge.md +++ /dev/null @@ -1,182 +0,0 @@ -# Bulk Merge - -## Description - -The `BulkMerge` method let you merge (insert or update/Upsert) a large number of entities in your database. - -```csharp -// Easy to use -bulk.DestinationTableName = "Customers"; -bulk.BulkMerge(customers); - -// Easy to customize -bulk.DestinationTableName = "Customers"; -bulk.BatchSize = 100; -bulk.AutoMapOutputIdentity = true; -bulk.BulkMerge(customers); -``` -[Try it (Entity)](https://dotnetfiddle.net/qpe8bV) - -[Try it (DataTable)](https://dotnetfiddle.net/rgugIj) - -### Performance Comparison - -| Operations | 1,000 Entities | 2,000 Entities | 5,000 Entities | -| :-------------- | -------------: | -------------: | -------------: | -| BulkMerge | 80 ms | 110 ms | 170 ms | - -[Try this benchmark online (Entity)](https://dotnetfiddle.net/roGRsu) - -[Try this benchmark online (DataTable)](https://dotnetfiddle.net/CY5s3G) - -> HINT: A lot of factors might affect the benchmark time such as index, column type, latency, throttling, etc. - -### Scenarios -The `BulkMerge` method is **fast** but also **flexible** to let you handle various scenarios such as: - -- [Merge and keep identity value](#merge-and-keep-identity-value) -- [Merge with custom key](#merge-with-custom-key) -- [Merge and include/exclude properties](#merge-and-includeexclude-properties) -- [Merge with related child entities](#merge-with-related-child-entities) -- [More scenarios](#more-scenarios) - -### Advantages -- Easy to use -- Flexible -- Increase performance -- Increase application responsiveness - -## Getting Started - -### Bulk Merge -The `BulkMerge` and `BulkMergeAync` methods let you merge a large number of entities in your database. - -```csharp -bulk.BulkMerge(customers); - -bulk.BulkMergeAsync(customers, cancellationToken); -``` -[Try it (Entity)](https://dotnetfiddle.net/pigFx8) - -[Try it (DataTable)](https://dotnetfiddle.net/LULDpj) - -### Bulk Merge with options -The `options` parameter let you use a lambda expression to customize the way entities are inserted/updated. - -```csharp -bulk.AutoMapKeyExpression = c => c.Code; -bulk.BulkMerge(customers); -``` -[Try it (Entity)](https://dotnetfiddle.net/5wMQ6X) - -```csharp -bulk.AutoMapKeyName = "Code"; -bulk.BulkMerge(customers); -``` -[Try it (DataTable)](https://dotnetfiddle.net/JJIPCB) - -## Real Life Scenarios - -### Merge and keep identity value -Your entity has an identity property, but you want to force to insert a specific value instead. The `MergeKeepIdentity` option allows you to keep the identity value of your entity. - -```csharp -bulk.MergeKeepIdentity = true; -bulk.BulkMerge(customers); -``` -[Try it (Entity)](https://dotnetfiddle.net/52uijH) - -[Try it (DataTable)](https://dotnetfiddle.net/gNXl1z) - -### Merge and include/exclude properties -You want to merge your entities but only for specific properties. - -- `ColumnInputExpression`: This option let you choose which properties to map. -- `ColumnIgnoreExpression`: This option let you ignore properties that are auto-mapped. -- `IgnoreOnMergeInsertExpression`: This option let you ignore properties only for the `INSERT` part. -- `IgnoreOnMergeUpdateExpression`: This option let you ignore properties only for the `UPDATE` part. - -```csharp -bulk.ColumnInputExpression = c => new { c.CustomerID, c.Name}; -bulk.BulkMerge(customers); - -bulk.IgnoreOnMergeUpdateExpression = c => new { c.CreatedDate }; -bulk.BulkMerge(customers); -``` -[Try it (Entity)](https://dotnetfiddle.net/W4TJkK) - -```csharp -var columnMapping = new ColumnMapping("CreatedDate"); - -columnMapping.IgnoreOnMergeUpdate = true; - -bulk.ColumnMappings.Add("CustomerID", true); -bulk.ColumnMappings.Add("UpdatedDate"); -bulk.ColumnMappings.Add("Name"); -bulk.ColumnMappings.Add(columnMapping); -bulk.BulkMerge(dtCustomers); -``` -[Try it (DataTable)](https://dotnetfiddle.net/TIfeSG) - -### Merge with custom key -You want to merge entities, but you don't have the primary key. The `ColumnPrimaryKeyExpression` let you use as a key any property or combination of properties. - -```csharp -bulk.AutoMapKeyExpression = c => c.Code; -bulk.BulkMerge(customers); -``` -[Try it (Entity)](https://dotnetfiddle.net/Xlcdxq) - -```csharp -bulk.AutoMapKeyName = "Code"; -bulk.BulkMerge(customers); -``` -[Try it (DataTable)](https://dotnetfiddle.net/9KOxdW) - - -### Merge with related child entities -You want to merge entities but also merge related child entities. - -```csharp -bulk.DestinationTableName = "Invoices"; -bulk.AutoMapOutputIdentity = true; -bulk.BulkMerge(invoices); - -// SET foreign key value -invoices.ForEach(x => x.Items.ForEach(y => y.InvoiceID = x.InvoiceID)); - -bulk.DestinationTableName = "InvoiceItems"; -bulk.BulkMerge(invoices.SelectMany(x => x.Items).ToList()); -``` -[Try it (Entity)](https://dotnetfiddle.net/LLDcvy) - -[Try it (DataTable)](https://dotnetfiddle.net/rhq5ZM) - -### More scenarios -Hundred of scenarios has been solved and are now supported. - -The best way to ask for a special request or to find out if a solution for your scenario already exists is by contacting us: -info@zzzprojects.com - -## Documentation - -### BulkMerge - -###### Methods - -| Name | Description | Example (DataTable) | Example (Entity) | -| :--- | :---------- | :------ | :------ | -| `BulkMerge(items)` | Bulk insert entities in your database. | [Try it](https://dotnetfiddle.net/hjTQmE) | [Try it](https://dotnetfiddle.net/z2lxbA) | -| `BulkMergeAsync(items)` | Bulk insert entities asynchronously in your database. | | | -| `BulkMergeAsync(items, cancellationToken)` | Bulk insert entities asynchronously in your database. | | | - -###### Options -More options can be found here: - -- [Audit](https://bulk-operations.net/audit) -- [Batch](https://bulk-operations.net/batch) -- [Execute Event](https://bulk-operations.net/execute-event) -- [Log](https://bulk-operations.net/log) -- [Temporary Table](https://bulk-operations.net/temporary-table) -- [Transient Error](https://bulk-operations.net/transient-error) -- [SQL Server](https://bulk-operations.net/sql-server) diff --git a/docs2/pages/documentations/bulk-savechanges.md b/docs2/pages/documentations/bulk-savechanges.md deleted file mode 100644 index afcebca..0000000 --- a/docs2/pages/documentations/bulk-savechanges.md +++ /dev/null @@ -1,19 +0,0 @@ -# Bulk SaveChanges - -## Introduction - -Execute an INSERT/UPDATE/DELETE operation using the DataRowState of the DataTable. - -### Example - Bulk SaveChanges -```csharp -var dt = new DataTable(); -// ...seed... - -var bulk = new BulkOperation(connection); - -// Easy to customize -bulk.BatchSize = 1000; - -// Easy to use -bulk.BulkSaveChanges(dt); -``` diff --git a/docs2/pages/documentations/bulk-synchronize.md b/docs2/pages/documentations/bulk-synchronize.md deleted file mode 100644 index a7619a5..0000000 --- a/docs2/pages/documentations/bulk-synchronize.md +++ /dev/null @@ -1,166 +0,0 @@ -# Bulk Synchronize - -## Description - -The `BulkSynchronize` extension method let you synchronize a large number of entities in your database. - -A synchronize is a mirror operation from the data source to the database. All rows that match the entity key are `UPDATED`, non-matching rows that exist from the source are `INSERTED`, non-matching rows that exist in the database are `DELETED`. - -```csharp -// Easy to use -bulk.BulkSynchronize(customers); - -// Easy to customize -bulk.DestinationTableName = "Customers"; - -bulk.AutoMapKeyExpression = customer => customer.Code; -bulk.BulkSynchronize(customers); -``` -[Try it (Entity)](https://dotnetfiddle.net/06N89k) - -```csharp -// Easy to use -bulk.BulkSynchronize(dtCustomers); - -// Easy to customize -bulk.DestinationTableName = "Customers"; - -bulk.AutoMapKeyName = "Code"; -bulk.BulkSynchronize(dtCustomers); -}); -``` -[Try it (DataTable)](https://dotnetfiddle.net/RLvbF1) - -### Scenarios -The `BulkSynchronize` method is **fast** but also **flexible** to let you handle various scenarios such as: -- [Synchronize and keep identity value](#synchronize-and-keep-identity-value) -- [Synchronize and include/exclude properties](#synchronize-and-includeexclude-properties) -- [Synchronize with custom key](#synchronize-with-custom-key) -- [More scenarios](#more-scenarios) - -### Advantages -- Easy to use -- Flexible -- Increase performance -- Increase application responsiveness - -## Getting Started - -### Bulk Synchronize -The `BulkSynchronize` and `BulkSynchronizeAync` methods let you synchronize a large number of entities in your database. - -```csharp -bulk.AutoMapKeyExpression = customer => customer.Code; -bulk.BulkSynchronize(customers); -``` -[Try it (Entity)](https://dotnetfiddle.net/rd4Qm2) - -```csharp -bulk.AutoMapKeyName = "Code"; -bulk.BulkSynchronize(dtCustomers); -``` -[Try it (DataTable)](https://dotnetfiddle.net/LMLvFy) - -### Bulk Synchronize with options -The `options` parameter let you use a lambda expression to customize the way entities are synchronized. - -```csharp -context.BulkSynchronize(customers, options => options.BatchSize = 100); - -context.BulkSynchronize(customers, options => { - options.ColumnPrimaryKeyExpression = customer => customer.Code; -}); -``` -[Try it (Entity)](https://dotnetfiddle.net/P4j6y4) - -[Try it (DataTable)](https://dotnetfiddle.net/Z3QmQH) - -## Real Life Scenarios - -### Synchronize and keep identity value -Your entity has an identity property, but you want to force to insert a specific value instead. The `SynchronizeKeepIdentity` option allows you to keep the identity value of your entity. - -```csharp -bulk.SynchronizeKeepidentity = true; -bulk.BulkSynchronize(customers); -``` -[Try it (Entity)](https://dotnetfiddle.net/P6txGi) - -[Try it (DataTable)](https://dotnetfiddle.net/U8ARaT) - -### Synchronize and include/exclude properties -You want to synchronize your entities but only for specific properties. - -- `ColumnInputExpression`: This option let you choose which properties to map. -- `IgnoreOnSynchronizeInsertExpression`: This option let you ignore when inserting properties that are auto-mapped. -- `IgnoreOnSynchronizeUpdateExpression`: This option let you ignore when updating properties that are auto-mapped. - -```csharp -bulk.IgnoreOnSynchronizeInsertExpression = c => c.UpdatedDate; -bulk.IgnoreOnSynchronizeUpdateExpression = c => c.CreatedDate; -bulk.AutoMapKeyExpression = customer => customer.Code; -bulk.BulkSynchronize(customizeToSynchronize); -``` -[Try it (Entity)](https://dotnetfiddle.net/4u3Mxf) - -```csharp -var columnMapping1 = new ColumnMapping("UpdatedDate"); -var columnMapping2 = new ColumnMapping("CreatedDate"); - -columnMapping1.IgnoreOnSynchronizeInsert = true; -columnMapping2.IgnoreOnSynchronizeUpdate = true; -bulk.ColumnMappings.Add(columnMapping1); -bulk.ColumnMappings.Add(columnMapping2); - -bulk.ColumnMappings.Add("Code", true); -bulk.ColumnMappings.Add("CustomerID"); -bulk.ColumnMappings.Add("FirstName"); -bulk.ColumnMappings.Add("LastName"); - -bulk.BulkSynchronize(dtCustomers); -``` -[Try it (DataTable)](https://dotnetfiddle.net/bAq5hA) - -### Synchronize with custom key -You want to synchronize entities, but you don't have the primary key. The `ColumnPrimaryKeyExpression` let you use as a key any property or combination of properties. - -```csharp -bulk.AutoMapKeyExpression = customer => customer.Code; -bulk.BulkSynchronize(customers); -``` -[Try it (Entity)](https://dotnetfiddle.net/oEShFh) - -```csharp -bulk.AutoMapKeyName = "Code"; -bulk.BulkSynchronize(dtCustomers); -``` -[Try it (DataTable)](https://dotnetfiddle.net/SGkrot) - -### More scenarios -Hundred of scenarios has been solved and are now supported. - -The best way to ask for a special request or to find out if a solution for your scenario already exists is by contacting us: -info@zzzprojects.com - -## Documentation - -### BulkSynchronize - -###### Methods - -| Name | Description | Example (DataTable) | Example (Entity) | -| :--- | :---------- | :------ | :------ | -| `BulkSynchronize(items)` | Bulk synchronize entities in your database. | [Try it](https://dotnetfiddle.net/DM5xFj) | [Try it](https://dotnetfiddle.net/LwkmNL) | -| `BulkSynchronizeAsync(items)` | Bulk synchronize entities asynchronously in your database. | | -| `BulkSynchronizeAsync(items, cancellationToken)` | Bulk synchronize entities asynchronously in your database. | | - -###### Options -More options can be found here: - -- [Audit](https://bulk-operations.net/audit) -- [Batch](https://bulk-operations.net/batch) -- [Execute Event](https://bulk-operations.net/execute-event) -- [Log](https://bulk-operations.net/log) -- [Temporary Table](https://bulk-operations.net/temporary-table) -- [Transient Error](https://bulk-operations.net/transient-error) -- [SQL Server](https://bulk-operations.net/sql-server) diff --git a/docs2/pages/documentations/bulk-update.md b/docs2/pages/documentations/bulk-update.md deleted file mode 100644 index a4cb4b0..0000000 --- a/docs2/pages/documentations/bulk-update.md +++ /dev/null @@ -1,165 +0,0 @@ -# Bulk Update - -## Description - -The `BulkUpdate` method let you update a large number of entities in your database. - -```csharp -// easy to use -bulk.DestinationTableName = "Customers"; -bulk.BulkUpdate(customers); - -// Easy to customize -bulk.DestinationTableName = "Customers"; -bulk.BatchSize = 100; -bulk.AutoMapOutputDirection = true; -bulk.BulkUpdate(customers); -``` -[Try it (Entity)](https://dotnetfiddle.net/xKlMEt) - -[Try it (DataTable)](https://dotnetfiddle.net/p2YC2w) - -### Performance Comparison - -| Operations | 1,000 Entities | 2,000 Entities | 5,000 Entities | -| :-------------- | -------------: | -------------: | -------------: | -| BulkUpdate | 80 ms | 110 ms | 170 ms | - -[Try it (Entity)](https://dotnetfiddle.net/tf8sSi) - -[Try it (DataTable)](https://dotnetfiddle.net/j6bFmr) - -> HINT: A lot of factors might affect the benchmark time such as index, column type, latency, throttling, etc. - -### Scenarios -The `BulkUpdate` method is **fast** but also **flexible** to let you handle various scenarios such as: - -- [Update and include/exclude properties](#update-and-includeexclude-properties) -- [Update with custom key](#update-with-custom-key) -- [Update with related child entities (Include Graph)](#update-with-related-child-entities-include-graph) -- [More scenarios](#more-scenarios) - -### Advantages -- Easy to use -- Flexible -- Increase performance -- Increase application responsiveness - -## Getting Started - -### Bulk Update -The `BulkUpdate` and `BulkUpdateAync` methods your let update a large number of entities in your database. - -```csharp -bulk.BulkUpdate(customers); - -bulk.BulkUpdateAsync(customers, cancellationToken); -``` -[Try it (Entity)](https://dotnetfiddle.net/kK4qnb) - -[Try it (DataTable)](https://dotnetfiddle.net/COCXD4) - -### Bulk Update with options -The `options` parameter let you use a lambda expression to customize the way entities are updated. - -```csharp -bulk.AutoMapKeyExpression = c => c.Code; -bulk.BulkUpdate(customers); -``` -[Try it (Entity)](https://dotnetfiddle.net/16kWmc) - -```csharp -bulk.AutoMapKeyName = "Code"; -bulk.BulkUpdate(dtCustomers); -``` -[Try it (DataTable)](https://dotnetfiddle.net/uWRH6Y) - -## Real Life Scenarios - -### Update and include/exclude properties -You want to update your entities but only for specific properties. - -- `ColumnInputExpression`: This option let you choose which properties to map. -- `IgnoreOnUpdateExpression`: This option let you ignore properties that are auto-mapped. - -```csharp -bulk.IgnoreOnUpdateExpression = c => new { c.ColumnToIgnore }; -bulk.BulkUpdate(customers.Skip(2)); -``` -[Try it (Entity)](https://dotnetfiddle.net/3z531u) - -```csharp -var columnMapping = new ColumnMapping("CreatedDate"); - -columnMapping.IgnoreOnUpdate = true; - -bulk.ColumnMappings.Add("CustomerID", true); -bulk.ColumnMappings.Add("UpdatedDate"); -bulk.ColumnMappings.Add("Name"); -bulk.ColumnMappings.Add(columnMapping); -bulk.BulkUpdate(dtCustomers); -``` -[Try it (DataTable)](https://dotnetfiddle.net/EyAtSE) - -### Update with custom key -You want to update entities, but you don't have the primary key. The `ColumnPrimaryKeyExpression` let you use as a key any property or combination of properties. - -```csharp -bulk.AutoMapKeyExpression = c => c.Code; -bulk.BulkUpdate(customers); -``` -[Try it (Entity)](https://dotnetfiddle.net/BEL4Ny) - -```csharp -bulk.AutoMapKeyName = "Code"; -bulk.BulkUpdate(customers); -``` -[Try it (DataTable)](https://dotnetfiddle.net/wJJM5T) - -### Update with related child entities -You want to update entities but also automatically insert related child entities. - -```csharp -bulk.DestinationTableName = "Invoices"; -bulk.AutoMapOutputIdentity = true; - -bulk.BulkUpdate(invoices); - -// SET foreign key value -invoices.ForEach(x => x.Items.ForEach(y => y.InvoiceID = x.InvoiceID)); - -bulk.DestinationTableName = "InvoiceItems"; -bulk.BulkUpdate(invoices.SelectMany(x => x.Items).ToList()); -``` -[Try it (Entity)](https://dotnetfiddle.net/eEmCu1) - -[Try it (DataTable)](https://dotnetfiddle.net/8C7est) - -### More scenarios -Hundred of scenarios has been solved and are now supported. - -The best way to ask for a special request or to find out if a solution for your scenario already exists is by contacting us: -info@zzzprojects.com - -## Documentation - -### BulkUpdate - -###### Methods - -| Name | Description | Example (DataTable) | Example (Entity) | -| :--- | :---------- | :------ | :------ | -| `BulkUpdate(items)` | Bulk update entities in your database. | [Try it](https://dotnetfiddle.net/jFMKu1) | [Try it](https://dotnetfiddle.net/fuv4IV) | -| `BulkUpdateAsync(items)` | Bulk update entities asynchronously in your database. | | -| `BulkUpdateAsync(items, cancellationToken)` | Bulk update entities asynchronously in your database. | | - -###### Options -More options can be found here: - -- [Audit](https://bulk-operations.net/audit) -- [Batch](https://bulk-operations.net/batch) -- [Execute Event](https://bulk-operations.net/execute-event) -- [Log](https://bulk-operations.net/log) -- [Temporary Table](https://bulk-operations.net/temporary-table) -- [Transient Error](https://bulk-operations.net/transient-error) -- [SQL Server](https://bulk-operations.net/sql-server) diff --git a/docs2/pages/documentations/bulkoperation-manager.md b/docs2/pages/documentations/bulkoperation-manager.md deleted file mode 100644 index ea1b120..0000000 --- a/docs2/pages/documentations/bulkoperation-manager.md +++ /dev/null @@ -1,3 +0,0 @@ -# BulkOperation Manager - -_Coming Soon_ diff --git a/docs2/pages/documentations/delete-from-query.md b/docs2/pages/documentations/delete-from-query.md deleted file mode 100644 index 83fef95..0000000 --- a/docs2/pages/documentations/delete-from-query.md +++ /dev/null @@ -1,23 +0,0 @@ -# Delete from Query - -## Delete From Query -Execute a DELETE operation using a LINQ Query. - -### Example -```csharp -var bulk = new BulkOperation(connection); - -// DELETE all customers inactive for more than 2 years -bulk.DeleteFromQuery( - c => c.Where(x => x.LastLogin < DateTime.Now.AddYears(-2))); -``` - -### Performance Benchmarks - -| Operations | 1,000 Entities | 2,000 Entities | 5,000 Entities | -| :-------------- | -------------: | -------------: | -------------: | -| DeleteFromQuery | 1 ms | 1 ms | 1 ms | - -### Support -- SQL Server 2008+ -- SQL Azure diff --git a/docs2/pages/documentations/eval-expressions/eval-compile.md b/docs2/pages/documentations/eval-expressions/eval-compile.md deleted file mode 100644 index 8f1c725..0000000 --- a/docs2/pages/documentations/eval-expressions/eval-compile.md +++ /dev/null @@ -1,65 +0,0 @@ -# Eval.Compile - -## Description -You can compile C# expression at runtime using the [Eval-Expression.NET](http://eval-expression.net/) library. - -You can download it here: [Download](http://eval-expression.net/download) - -> The Eval-Expression.NET library can be activated with the Bulk Operations license. - -## Compile and return a strongly typed delegate -You can return the delegate as a strongly typed function or action: - -- Eval.Compile<TDelegate>(string code) -- Eval.Compile<TDelegate>(string code, IEnumerable<string> parameterNames) -- Eval.Compile<TDelegate>(string code, params string[] parameterNames) - -### Example -```csharp -// Delegate Func -var compiled = Eval.Compile>("{0} + {1}"); -int result = compiled(1, 2); - -// Delegate Action -var compiled = Eval.Compile>("{0} + {1}"); -compiled(1, 2); - -// Named Parameter -var compiled = Eval.Compile>("X + Y", "X", "Y"); -int result = compiled(1, 2); -``` -{% include component-try-it.html href='https://dotnetfiddle.net/MBHlX8' %} - -## Compile and return a delegate -You can return the delegate as a generic delegate: - -- Eval.Compile(string code): Func<object> -- Eval.Compile(string code, Type type1): Func<object, object> -- Eval.Compile(string code, Type type1, ... , Type type9): Func<object, ... , object, object> -- Eval.Compile(string code, IEnumerable<Type> types): Func<IEnumerable, object> -- Eval.Compile(string code, params Type[] types): Func<IEnumerable, object> -- Eval.Compile(string code, IDictionary<string, Type> nameTypes): Func<IDictionary, object> - -### Example -```csharp -// Overload: Up to 9 parameters can be used -var compiled = Eval.Compile("{0} + {1}", typeof(int), typeof(int)); -object result = compiled(1, 2); - -// Overload: params Type[] -var values = new List() {1, 2}; -var types = values.Select(x => x.GetType()).ToArray(); - -var compiled = Eval.Compile("{0} + {1}", types); -var result = compiled(values); - -// Overload: IDictionary -var values = new Dictionary { {"X", 1}, {"Y", 2} }; -var types = values.ToDictionary(x => x.Key, x => x.Value.GetType()); - -var compiled = Eval.Compile("X + Y", types); -var result = compiled(values); -``` -{% include component-try-it.html href='https://dotnetfiddle.net/870F71' %} - - diff --git a/docs2/pages/documentations/eval-expressions/eval-execute.md b/docs2/pages/documentations/eval-expressions/eval-execute.md deleted file mode 100644 index 1bed429..0000000 --- a/docs2/pages/documentations/eval-expressions/eval-execute.md +++ /dev/null @@ -1,73 +0,0 @@ -# Eval.Execute - -## Description -You can execute C# expression at runtime using the Eval-Expression.NET library. - -You can download it here: [Download](http://eval-expression.net/download) - -> The Eval-Expression.NET library can be activated with the Bulk Operations license. - -You can specify parameter value to use in the expression from various way: - -- Anonymous Type -- Argument Position -- Class Member -- Dictionary - -Under the hood, the fist time an expression is executed, it's getting compiled and the delegate is stored in the memory before being returned and executed. All future call from the same expression will retrieve the delegate from the memory to optimize the performance. - -Even with this optimization, if you have to evaluate the same expression multiple times, for example, in a `for` loop, we highly recommend you to use directly the delegate returning from the Compile method instead. - -## Execute and return a strongly typed result -You can return the result as a strongly typed type: - -- Eval.Execute<TResult>(string code) -- Eval.Execute<TResult>(string code, object parameters) -- Eval.Execute<TResult>(string code, params object[] parameters) - -### Example - -```csharp -// Parameter: Anonymous Type -int result = Eval.Execute("X + Y", new { X = 1, Y = 2} ); - -// Parameter: Argument Position -int result = Eval.Execute("{0} + {1}", 1, 2); - -// Parameter: Class Member -dynamic expandoObject = new ExpandoObject(); -expandoObject.X = 1; -expandoObject.Y = 2; -int result = Eval.Execute("X + Y", expandoObject); - -// Parameter: Dictionary Key -var values = new Dictionary() { {"X", 1}, {"Y", 2} }; -int result = Eval.Execute("X + Y", values); -``` -{% include component-try-it.html href='https://dotnetfiddle.net/W9TwcP' %} - -## Execute and return an object result -You can return the result as an object: - -- Eval.Execute(string code) -- Eval.Execute(string code, object parameters) -- Eval.Execute(string code, params object[] parameters) - -```csharp -// Parameter: Anonymous Type -object result = Eval.Execute("X + Y", new { X = 1, Y = 2} ); - -// Parameter: Argument Position -object result = Eval.Execute("{0} + {1}", 1, 2); - -// Parameter: Class Member -dynamic expandoObject = new ExpandoObject(); -expandoObject.X = 1; -expandoObject.Y = 2; -object result = Eval.Execute("X + Y", expandoObject); - -// Parameter: Dictionary Key -var values = new Dictionary() { {"X", 1}, {"Y", 2} }; -object result = Eval.Execute("X + Y", values); -``` -{% include component-try-it.html href='https://dotnetfiddle.net/8mtLH8' %} diff --git a/docs2/pages/documentations/eval-expressions/linq-dynamic.md b/docs2/pages/documentations/eval-expressions/linq-dynamic.md deleted file mode 100644 index 92a3ad3..0000000 --- a/docs2/pages/documentations/eval-expressions/linq-dynamic.md +++ /dev/null @@ -1,75 +0,0 @@ -# LINQ Dynamic - -## Description -You can execute query dynamically through the [Eval-Expression.NET](http://eval-expression.net/) library. - -You can download it here: [Download](http://eval-expression.net/download) - -> The Eval-Expression.NET library can be activated with the Bulk Operations license. - -## LINQ Dynamic - Predicate -You can use any LINQ method that support predicate with a dynamic C# expression : - -- Deferred - - SkipWhile - - TakeWhile - - Where -- Immediate - - All - - Any - - Count - - First - - FirstOrDefault - - Last - - LastOrDefault - - LongCount - - Single - - SingleOrDefault - -### Example -```csharp -var list = new List() { 1, 2, 3, 4, 5 }; - -var list2 = list.Where(x => "x > 2"); -var list3 = list.Where(x => "x > X", new { X = 2 }); // with parameter -``` -{% include component-try-it.html href='https://dotnetfiddle.net/S42mkU' %} - -## LINQ Dynamic - Ordering and Selecting -You can use any ordering and selecting method with a dynamic C# expression: - - - OrderByDescendingDynamic - - OrderByDynamic - - SelectDynamic - - SelectMany - - ThenByDescendingDynamic - - ThenByDynamic - -> The **"Dynamic"** suffix is required for not overriding the default behavior (ordering or selecting by a string is valid). - -### Example -```csharp -var list = new List() { 5, 2, 4, 1, 3 }; - -// SelectDynamic -var list2 = list.SelectDynamic(x => "new { y = x + 1 }"); -var list3 = list.SelectDynamic(x => "new { y = x + 1 }", new { y = 1 }); - -// OrderByDynamic -var list4 = list.OrderByDynamic(x => "x + 1"); -var list5 = list.OrderByDynamic(x => "x + Y", new { Y = 1 }); -``` - -## LINQ Dynamic - Execute -You can push the LINQ Dynamic experience further by using the Execute method and chaining anything else: - -- Execute -- Execute<TResult> - -### Example -```csharp -var list = new List() { 1, 2, 3, 4, 5 }; - -var list2 = list.Execute>("Where(x => x > 2).OrderBy(x => x).ToList()"); -var list3 = list.Execute>("Where(x => x > y).OrderBy(x => x).ToList()", new { y = 2 }); -``` diff --git a/docs2/pages/documentations/options-audit.md b/docs2/pages/documentations/options-audit.md deleted file mode 100644 index fb8541e..0000000 --- a/docs2/pages/documentations/options-audit.md +++ /dev/null @@ -1,17 +0,0 @@ -# Audit - -## UseAudit -Allow you to audit inserted/deleted rows from the database. - -- Default Value: False - -### Example -```csharp -var bulk = new BulkOperation(connection); - -bulk.UseAudit = true; - -bulk.BulkMerge(dt); - -var auditEntries = bulk.AuditEntries; -``` diff --git a/docs2/pages/documentations/options-batch.md b/docs2/pages/documentations/options-batch.md deleted file mode 100644 index 6ccae82..0000000 --- a/docs2/pages/documentations/options-batch.md +++ /dev/null @@ -1,47 +0,0 @@ -# Batch - -## Batch Options -- [BatchSize](#batchsize) -- [BatchTimeout](#batchtimeout) -- [BatchDelayInteval](#batchdelayinterval) - -## BatchSize -Allow you to set the number of records to use in a batch. - -By example, if you insert 1000 entities, and you set a batch size of 100, then ten inserts will be performed. - -### Example -```csharp -var bulk = new BulkOperation(connection); - -bulk.BatchSize = 100; - -bulk.BulkMerge(dt); -``` - -## BatchTimeout -Allow you to set the maximum of time elapsing for a batch before the command throws a timeout exception. - -### Example -```csharp -var bulk = new BulkOperation(connection); - -bulk.BatchTimeout = 180; - -bulk.BulkMerge(dt); -``` - -## BatchDelayInterval -Allow you to set a delay between every batch. - -### Example -```csharp -var bulk = new BulkOperation(connection); - -bulk.BatchDelayInterval = 100; - -bulk.BulkMerge(dt); -``` - - -> WARNING: Be careful, this options can often cause lock/deadlock within a transaction. diff --git a/docs2/pages/documentations/options-column-expression.md b/docs2/pages/documentations/options-column-expression.md deleted file mode 100644 index 8773e69..0000000 --- a/docs2/pages/documentations/options-column-expression.md +++ /dev/null @@ -1,11 +0,0 @@ -# Column Expression - -## Column Expression Options -- [ColumnInputExpression](#columninputexpression) -- [ColumnKeyExpression](#columnkeyexpression) -- [ColumnOutputExpression](#columnoutputexpression) -- [ColumnSynchronizeDeleteKeySubsetExpression](#columnsynchronizedeletekeysubsetexpression) -- [IgnoreOnMergeInsertExpression](#ignoreonmergeinsertexpression) -- [IgnoreOnMergeUpdateExpression](#ignoreonmergeupdatexpression) - -_Coming Soon_ diff --git a/docs2/pages/documentations/options-execute-event.md b/docs2/pages/documentations/options-execute-event.md deleted file mode 100644 index 5a2c712..0000000 --- a/docs2/pages/documentations/options-execute-event.md +++ /dev/null @@ -1,29 +0,0 @@ -# Execute Event - -## Excecute Event Options -- [BulkOperationExecuting](#bulkoperationexecuting) -- [BulkOperationExecuted](#bulkoperationexecuted) - -## BulkOperationExecuting -Allow you to change configuration before the bulk operation is executed. - -### Example -```csharp -var bulk = new BulkOperation(connection); - -bulk.BulkOperationExecuting = bulkOperation => { /* configuration */ }; - -bulk.BulkMerge(dt); -``` - -## BulkOperationExecuted -Allow you to change configuration after the bulk operation is executed. - -### Example -```csharp -var bulk = new BulkOperation(connection); - -bulk.BulkOperationExecuted = bulkOperation => { /* configuration */ }; - -bulk.BulkMerge(dt); -``` diff --git a/docs2/pages/documentations/options-log.md b/docs2/pages/documentations/options-log.md deleted file mode 100644 index 67d4ed6..0000000 --- a/docs2/pages/documentations/options-log.md +++ /dev/null @@ -1,47 +0,0 @@ -# Log - -## Log Options -- [Log](#log) -- [UseLogDump](#uselogdump) -- [LogDump](#logdump) - -## Log -Allow you to log some event happening in your database. - -### Example -```csharp -StringBuilder logger = new StringBuilder(); -var bulk = new BulkOperation(connection); - -bulk.Log += s => logger.AppendLine(s); - -bulk.BulkMerge(dt); -``` - -## UseLogDump -Allow you to log in a string (LogDump) event happening in your database. - -### Example -```csharp -var bulk = new BulkOperation(connection); - -bulk.UseLogDump = true; - -bulk.BulkMerge(dt); - -var logDump = bulk.LogDump; -``` - -## LogDump -Allow you to retrieve event happening in your database when UseLogDump is enabled. - -### Example -```csharp -var bulk = new BulkOperation(connection); - -bulk.UseLogDump = true; - -bulk.BulkMerge(dt); - -var logDump = bulk.LogDump; -``` diff --git a/docs2/pages/documentations/options-sql-server.md b/docs2/pages/documentations/options-sql-server.md deleted file mode 100644 index 0d2b2e7..0000000 --- a/docs2/pages/documentations/options-sql-server.md +++ /dev/null @@ -1,16 +0,0 @@ -# SQL Server - -## SQL Server Options -- [SqlBulkCopyOptions](#sqlbulkcopyoptions) - -## SqlBulkCopyOptions -Allow you to set the SqlBulkCopyOptions to use when a strategy with the SqlBulkCopy is selected. - -### Example -```csharp -var bulk = new BulkOperation(connection); - -bulk.SqlBulkCopyOptions = SqlBulkCopyOptions.Default | SqlBulkCopyOptions.TableLock; - -bulk.BulkMerge(dt); -``` diff --git a/docs2/pages/documentations/options-temporary-table.md b/docs2/pages/documentations/options-temporary-table.md deleted file mode 100644 index fe772c0..0000000 --- a/docs2/pages/documentations/options-temporary-table.md +++ /dev/null @@ -1,56 +0,0 @@ -# Temporary Table - -Customize how and when to use a temporary table instead of inline SQL. - -## TemporaryTableBatchByTable -Allow you to set the maximum number of batches a temporary table can contain. - -- Default Value: 0 (unlimited) -### Example -```csharp -var bulk = new BulkOperation(connection); - -bulk.TemporaryTableBatchByTable = 5; - -bulk.BulkMerge(dt); -``` - -## TemporaryTableInsertBatchSize -Allow you to set the number of record by batch to insert in a temporary table. - -- Default Value: 10,000 -### Example -```csharp -var bulk = new BulkOperation(connection); - -bulk.TemporaryTableInsertBatchSize = 1000; - -bulk.BulkMerge(dt); -``` - -## TemporaryTableMinRecord -Allow you to set the minimum number of records before a temporary table strategy is used. - -- Default Value: 10 -### Example -```csharp -var bulk = new BulkOperation(connection); - -bulk.TemporaryTableMinRecord = 15; - -bulk.BulkMerge(dt); -``` - -## TemporaryTableUseTableLock -Allow you to lock the temporary table while being populated. - -- Default Value: true - -### Example -```csharp -var bulk = new BulkOperation(connection); - -bulk.TemporaryTableUseTableLock = true; - -bulk.BulkMerge(dt); -``` diff --git a/docs2/pages/documentations/options-transient-error.md b/docs2/pages/documentations/options-transient-error.md deleted file mode 100644 index b053dac..0000000 --- a/docs2/pages/documentations/options-transient-error.md +++ /dev/null @@ -1,32 +0,0 @@ -# Transient Error - -## Transient Error Options -- [RetryCount](#retrycount) -- [RetryInterval](#retryinterval) - -## RetryCount -Allow you to set how many time the bulk operation should retry the operation when a transient error occurs. - -### Example - -```csharp -var bulk = new BulkOperation(connection); - -bulk.RetryCount = 3; - -bulk.BulkMerge(dt); -``` - -## RetryInterval -Allow you to set how many time to wait before trying an operation again when a transient error occurs. - -### Example - -```csharp -var bulk = new BulkOperation(connection); - -bulk.RetryCount = 3; -bulk.RetryInterval = new TimeSpan(100); - -bulk.BulkMerge(dt); -``` diff --git a/docs2/pages/documentations/update-from-query.md b/docs2/pages/documentations/update-from-query.md deleted file mode 100644 index 4d231ce..0000000 --- a/docs2/pages/documentations/update-from-query.md +++ /dev/null @@ -1,24 +0,0 @@ -# Update from Query - -## Update From Query -Execute an INSERT operation. - -### Example -```csharp -var bulk = new BulkOperation(connection); - -// UPDATE all customers inactive for more than 2 years -bulk.UpdateFromQuery( - c => c.Where(x => x.IsActive && x.LastLogin < DateTime.Now.AddYears(-2)), - c => new Customer {IsActive = false}); -``` - -### Performance Benchmarks - -| Operations | 1,000 Entities | 2,000 Entities | 5,000 Entities | -| :-------------- | -------------: | -------------: | -------------: | -| UpdateFromQuery | 1 ms | 1 ms | 1 ms | - -### Support -- SQL Server 2008+ -- SQL Azure diff --git a/docs2/pages/faq/contact-us.md b/docs2/pages/faq/contact-us.md deleted file mode 100644 index b55d8f9..0000000 --- a/docs2/pages/faq/contact-us.md +++ /dev/null @@ -1,21 +0,0 @@ -# Contact us - -## I have a question! What should I do? -Contact us directly with your questions: info@zzzprojects.com _(recommended)_ - -You can also use the [Issues Tracker](https://github.com/zzzprojects/EntityFramework-Extensions/issues). - -## I think I've found a bug! What should I do? -Contact us directly with your bug: info@zzzprojects.com _(recommended)_ - -You can also use the [Issues Tracker](https://github.com/zzzprojects/EntityFramework-Extensions/issues). - -## I think I've found a feature! What should I do? -Contact us directly with your feature: info@zzzprojects.com _(recommended)_ - -You can also use the project [Issues Tracker](https://github.com/zzzprojects/EntityFramework-Extensions/issues). - -## I think you forget about my request! What should I do? -We usually get/answer over 20 requests by day. Unfortunately, it's happen! - -Just contact us back again, and we will make sure we don't miss it a second time! diff --git a/docs2/pages/faq/faq-general.md b/docs2/pages/faq/faq-general.md deleted file mode 100644 index 7d3a33d..0000000 --- a/docs2/pages/faq/faq-general.md +++ /dev/null @@ -1,21 +0,0 @@ -# FAQ General - -## Which Payment method do you support? -We support the following payment method: - -- PayPal -- Check -- Bank Transfer - -## Can I purchase this product from a Reseller? -Yes, just let him know to contact us. - -## What's your average SLA response and resolution times? -We try to provide an outstanding support service. - -We normally answer very fast, often within one hour. - -Most fixes is resolved within one business day. - -## Do you support EF Core -We do not yet. We are currently re-writing the library to support it. diff --git a/docs2/pages/faq/faq-installation.md b/docs2/pages/faq/faq-installation.md deleted file mode 100644 index f9be357..0000000 --- a/docs2/pages/faq/faq-installation.md +++ /dev/null @@ -1,10 +0,0 @@ -# Installation - -## How to I Install your product? -It simple, you download it from NuGet and add it to your project. - -More Info: [Tutorials - Installing](installing) - -## I have installed your product, but I don't see your extensions method -- Make sure to install it in the right project -- Make sure your project support .NET40 or better diff --git a/docs2/pages/faq/faq-license.md b/docs2/pages/faq/faq-license.md deleted file mode 100644 index c5cec8f..0000000 --- a/docs2/pages/faq/faq-license.md +++ /dev/null @@ -1,74 +0,0 @@ -# License - -## Developer Seat - -### What's a developer seat? -A developer seat is a developer working for your company and developing code directly with our product. - -You don't have to purchase developer seat for front-end developer or back-end developer which doesn't use our product API. - -Since you buy developer seat, you can develop an unlimited amount of projects within your company. - -### What's the cost for additional developer seat? -The cost for additional developer seat is usually extremely low. We want to make sure our library is accessible for small and large company. - -### Do developer seat are transferable? -Yes, a developer seat can be transferred to any employee within your company. - -## Perpertual License - -### What's a perpetual license? -A perpetual license allows you to use the licensed product indefinitely. - -### Even when my Support & Upgrade is expired? -Yes. - -## Support & Upgdrade - -### My support & upgrade have expired! What will happen? -Don't worry. Your product continue to work forever! - -You can still download and use any version released before the support & upgrade expiration date. - -You will need to renew to use version released after the support & upgrade expiration date. - -### How do I renew my License? -We usually start to send renewal mail two months before the support & upgrade expiration date. - -If you didn't receive such email, you could contact us directly: info@zzzprojects.com - -### Can I have renewal discount? -We provide a 25% discount to early renewal. So anyone renewing before the support & upgrade expiration date automatically get a renewal discount. - -### I'm too late for early renewal discount! What can I do? -If you are few day late, we still provide early renewal discount. - -However, if you have few months late, you will need to purchase the library again. - -The best way to find out if you still have access to early renewal discount is by contacting us: info@zzzprojects.com - -### Why should I renew? -Renewing your support & upgrade give the following benefits: - -- Major version releases and new product features -- Fast support by mail -- Protection against price increases during the maintenance term - -## Royalty Free - -### Can I install Entity Framework Extensions on Client Machine? -Yes, the product is royalty free. - -That mean, you paid for developer seat, but customer using your product doesn't have to pay. - -### Is Entity Framework Extensions Royalty Free? -Yes, the product is royalty free. - -This mean, you can develop a project and install it on thousands of clients. - -You paid for developer seat within your company. - -Some standard royalty free limitations: - -- You can sell a similar product and claim it's yours. -- If your customer has access to your source code and develops using our API, they will have to purchase a license. diff --git a/docs2/pages/faq/faq.md b/docs2/pages/faq/faq.md deleted file mode 100644 index 8d12e90..0000000 --- a/docs2/pages/faq/faq.md +++ /dev/null @@ -1,11 +0,0 @@ -# FAQ - -## FAQ - -
    -{% for num in (0..site.data.pages.size) %} - {% if site.data.pages[num].category == page.permalink and site.data.pages[num].url != page.permalink %} -
  • {{ site.data.pages[num].title }}
  • - {% endif %} -{% endfor %} -
diff --git a/docs2/pages/faq/issue-tracker.md b/docs2/pages/faq/issue-tracker.md deleted file mode 100644 index 4352f99..0000000 --- a/docs2/pages/faq/issue-tracker.md +++ /dev/null @@ -1,11 +0,0 @@ -# Issue Tracker - -## Where is your Issue Tracker? - -While we prefer to be contacted directly: info@zzzprojects.com - -We understand some people prefer to have an online issue tracker to follow and comment their issues. - -You can create issue here: - -- [Issue Tracker](https://github.com/zzzprojects/EntityFramework-Extensions/issues) diff --git a/docs2/pages/getting-started/_sidebar.md b/docs2/pages/getting-started/_sidebar.md deleted file mode 100644 index ba6856c..0000000 --- a/docs2/pages/getting-started/_sidebar.md +++ /dev/null @@ -1,7 +0,0 @@ -- [Overview](overview.md) -- [Licensing](licensing.md) -- Tutorials - - [Bulk Methods](tutorial-bulk-methods.md) - - [Bulk Generic Methods](tutorial-bulk-generic-methods.md) - - [From Query Methods](tutorial-from-query-methods.md) - diff --git a/docs2/pages/getting-started/licensing.md b/docs2/pages/getting-started/licensing.md deleted file mode 100644 index 20351f1..0000000 --- a/docs2/pages/getting-started/licensing.md +++ /dev/null @@ -1,78 +0,0 @@ -# Licensing - -## Evaluation Period -You can evaluate our library for several months before purchasing it. - -The trial period stops at the end of the month. When you receive a license expiration error, download the latest version which will automatically extend your trial period. - -You can also purchase the library [here](/pricing) - -Upon purchase, you will receive a license name and a license key. - -## How can I get a free license for a personal or academic purpose? -We don't offer free licenses. - -However, you can benefit from all the prime features for personal or academic projects for free by downloading the trial at the beginning of every month. - -## Setup License from config file -The license name and key can be directly added in the app.config or web.config file in the appSettings section. - - -```csharp - - - - -``` - -## Setup License from appsettings.json file (.NET Core) -The license name and key can be added directly in the appsettings.json. - -```csharp -{ - "Z.BulkOperations": { - "LicenseName": "[licenseName]", - "LicenseKey": "[licenseKey]" - } -} -``` - -## Setup License from code -You can also set the license name and key directly in the code. - - -```csharp -// using Z.BulkOperations; // Don't forget to include this. - -string licenseName = //... PRO license name -string licenseKey = //... PRO license key - -Z.BulkOperations.LicenseManager.AddLicense(licenseName, licenseKey); -``` - -### Recommendation -- Use the config file to store your license name and license key. -- **Web App:** Use Application_Start in global.asax to activate your license. -- **WinForm App:** Use the main thread method to activate your license. -- **Win Service:** Use the OnStart method to activate your license - -> The AddLicense must be set before the first call to the library. Otherwise, you will start the evaluation period - -## How can I check if my license is valid? -The validate method allow you to know whether your license is valid or not. - -```csharp -// CHECK for default provider (SQL Server) -string licenseErrorMessage; -if (!Z.BulkOperations.LicenseManager.ValidateLicense(out licenseErrorMessage)) -{ - throw new Exception(licenseErrorMessage); -} - -// CHECK for a specific provider -string licenseErrorMessage; -if (!Z.BulkOperations.LicenseManager.ValidateLicense(out licenseErrorMessage, ProviderType.MySql)) -{ - throw new Exception(licenseErrorMessage); -} -``` diff --git a/docs2/pages/getting-started/overview.md b/docs2/pages/getting-started/overview.md deleted file mode 100644 index d77deba..0000000 --- a/docs2/pages/getting-started/overview.md +++ /dev/null @@ -1,83 +0,0 @@ -# Overview - -## What's Bulk Operations library? - -Like SqlBulkCopy, it allows you to perform very fast insertion in an SQL Server. - -Unlike SqlBulkCopy, it supports all kind of operations: - -- Bulk Insert -- Bulk Update -- Bulk Delete -- Bulk Merge -- Bulk SaveChanges -- Bulk Synchronize - -And many providers: - -- SQL Server 2008+ -- SQL Azure -- SQL Compact -- Oracle -- MySQL -- PostgreSQL -- SQLite - -It's easy to use, and easy to customize. - -```csharp -// Easy to use -var bulk = new BulkOperation(connection); -bulk.BulkInsert(dt); -bulk.BulkUpdate(dt); -bulk.BulkDelete(dt); -bulk.BulkMerge(dt); - -// Easy to customize -var bulk = new BulkOperation(connection); -bulk.BatchSize = 1000; -bulk.ColumnInputExpression = c => new { c.Name, c.FirstName }; -bulk.ColumnOutputExpression = c => c.CustomerID; -bulk.ColumnPrimaryKeyExpression = c => c.Code; -bulk.BulkMerge(customers); -``` - -### Is it that simple? - -Yes, - -That's why people fall in love so quickly with our library. - -## Installing -Download the NuGet Package - -## Requirements - -### .NET Version - -- .NET Framework 4.0 or greater -- .NET Standard 2.0 or greater - -### Database Provider - -- SQL Server 2008+ -- SQL Azure -- SQL Compact -- Oracle -- MySQL -- PostgreSQL -- SQLite - -## Who use it? - -Already **thousands** of companies of all sizes and kinds use it: - -- From start-up company with one developer -- To fortune 100 companies with hundreds of developers - -Are you still not using it? Give it one try, and you will understand why they choose our library. - -Under the hood, some of our libraries also use it: - -- [Entity Framework Extensions](http://entityframework-extensions.net/) -- [Dapper Plus](http://dapper-plus.net/) diff --git a/docs2/pages/getting-started/tutorial-bulk-generic-methods.md b/docs2/pages/getting-started/tutorial-bulk-generic-methods.md deleted file mode 100644 index 0b2815d..0000000 --- a/docs2/pages/getting-started/tutorial-bulk-generic-methods.md +++ /dev/null @@ -1,44 +0,0 @@ -# Bulk Generic Methods - -## Introduction -Bulk Generic Methods allow you to work with strongly type expression. - -| Name | Description | -| :-------------- | :------------- | -| BulkInsert | Execute an INSERT operation. | -| BulkUpdate | Execute an UPDATE operation. | -| BulkDelete | Execute a DELETE operation. | -| BulkMerge | Execute a MERGE/UPSERT operation. UPDATE existing rows matching the key, and INSERT new rows. | -| BulkSynchronize | Execute a SYNCHRONIZE operation. UPDATE existing rows matching the key, INSERT new rows and DELETE records from the destination not existing in the source. | - -### Example - -```csharp -var list = new List(); -// ...seed... - -var bulk = new BulkOperation(connection); - -// Easy to customize -bulk.BatchSize = 1000; -bulk.ColumnInputExpression = c => new { c.Name, c.FirstName }; -bulk.ColumnOutputExpression = c => c.CustomerID; -bulk.ColumnPrimaryKeyExpression = c => c.Code; - -// Easy to use -bulk.BulkInsert(customers); -bulk.BulkUpdate(customers); -bulk.BulkDelete(customers); -bulk.BulkMerge(customers); - -``` - -### Performance Benchmark - -| Operations | 1,000 Rows | 10,000 Rows | 100,000 Rows | 1,000,000 Rows | -| :-------------- | -------------: | -------------: | -------------: | -------------: | -| BulkInsert | 6 ms | 25 ms | 200 ms | 2,000 ms | -| BulkUpdate | 50 ms | 80 ms | 575 ms | 6,500 ms | -| BulkDelete | 45 ms | 70 ms | 625 ms | 6,800 ms | -| BulkMerge | 65 ms | 160 ms | 1200 ms | 12,000 ms | - diff --git a/docs2/pages/getting-started/tutorial-bulk-methods.md b/docs2/pages/getting-started/tutorial-bulk-methods.md deleted file mode 100644 index 7dd3d0e..0000000 --- a/docs2/pages/getting-started/tutorial-bulk-methods.md +++ /dev/null @@ -1,42 +0,0 @@ -# Bulk Methods - -## Introduction -The .NET Bulk Operations library allow you to perform all operations in your database. - -| Name | Description | -| :-------------- | :------------- | -| BulkInsert | Execute an INSERT operation. | -| BulkUpdate | Execute an UPDATE operation. | -| BulkDelete | Execute a DELETE operation. | -| BulkMerge | Execute a MERGE/UPSERT operation. UPDATE existing rows matching the key, and INSERT new rows. | -| BulkSaveChanges | Execute an INSERT/UPDATE/DELETE operation using the DataRowState of the DataTable. | -| BulkSynchronize | Execute a SYNCHRONIZE operation. UPDATE existing rows matching the key, INSERT new rows and DELETE records from the destination not existing in the source. | - -### Example - -```csharp -var dt = new DataTable(); -// ...seed... - -var bulk = new BulkOperation(connection); - -// Easy to customize -bulk.BatchSize = 1000; - -// Easy to use -bulk.BulkInsert(dt); -bulk.BulkUpdate(dt); -bulk.BulkDelete(dt); -bulk.BulkMerge(dt); - -``` - -### Performance Benchmark - -| Operations | 1,000 Rows | 10,000 Rows | 100,000 Rows | 1,000,000 Rows | -| :-------------- | -------------: | -------------: | -------------: | -------------: | -| BulkInsert | 6 ms | 25 ms | 200 ms | 2,000 ms | -| BulkUpdate | 50 ms | 80 ms | 575 ms | 6,500 ms | -| BulkDelete | 45 ms | 70 ms | 625 ms | 6,800 ms | -| BulkMerge | 65 ms | 160 ms | 1200 ms | 12,000 ms | - diff --git a/docs2/pages/getting-started/tutorial-from-query-methods.md b/docs2/pages/getting-started/tutorial-from-query-methods.md deleted file mode 100644 index a0a029e..0000000 --- a/docs2/pages/getting-started/tutorial-from-query-methods.md +++ /dev/null @@ -1,37 +0,0 @@ -# From Query Methods - -## Introduction -FromQuery operations allow you to use LINQ Query to execute an operation directly in the database - -| Name | Description | -| :-------------- | :------------- | -| DeleteFromQuery | Execute a DELETE operation using a LINQ Query. | -| UpdateFromQuery | Execute an UPDATE operation using a LINQ Query. | - - - -### Example -```csharp -var bulk = new BulkOperation(connection); - -// DELETE all customers inactive for more than 2 years -bulk.DeleteFromQuery( - c => c.Where(x => x.LastLogin < DateTime.Now.AddYears(-2))); - -// UPDATE all customers inactive for more than 2 years -bulk.UpdateFromQuery( - c => c.Where(x => x.IsActive && x.LastLogin < DateTime.Now.AddYears(-2)), - c => new Customer {IsActive = false}); -``` - - -### Performance Benchmarks - -| Operations | 1,000 Entities | 2,000 Entities | 5,000 Entities | -| :-------------- | -------------: | -------------: | -------------: | -| DeleteFromQuery | 1 ms | 1 ms | 1 ms | -| UpdateFromQuery | 1 ms | 1 ms | 1 ms | - -### Support -- SQL Server 2008+ -- SQL Azure diff --git a/docs2/pages/troubleshooting/_sidebar.md b/docs2/pages/troubleshooting/_sidebar.md deleted file mode 100644 index 4d3d11e..0000000 --- a/docs2/pages/troubleshooting/_sidebar.md +++ /dev/null @@ -1,3 +0,0 @@ -- [Trial Period Expired](trial-period-expired-exception.md) -- [MD5](md5-exception.md) -- [Trial Extend](trial.md) diff --git a/docs2/pages/troubleshooting/md5-exception.md b/docs2/pages/troubleshooting/md5-exception.md deleted file mode 100644 index bd64c5d..0000000 --- a/docs2/pages/troubleshooting/md5-exception.md +++ /dev/null @@ -1,25 +0,0 @@ -# MD5 Exception - -## Problem - -You execute a method from the Bulk Operations library, and the following error is thrown: - -> This implementation is not part of the Windows Platform FIPS validated cryptographic algorithms. - -## Solution - -### Cause - -The default algorithm to validate the license key & name is not supported with FIPS enabled. - -### Fix - -#### Ask for a compatible key - -Contact us and we will send you a new key supporting FIPS: info@zzzprojects.com - -Why don't we generated key compatible with FIPS by default? Because it will not be supported for a client machine with Windows XP or below. - -#### Disable FIPS - -Article: [Disable FIPS](http://docs.trendmicro.com/all/ent/sc/v3.0/en-US/cmcolh/t_fips.html){:target="_blank"} diff --git a/docs2/pages/troubleshooting/trial-period-expired-exception.md b/docs2/pages/troubleshooting/trial-period-expired-exception.md deleted file mode 100644 index a26b696..0000000 --- a/docs2/pages/troubleshooting/trial-period-expired-exception.md +++ /dev/null @@ -1,28 +0,0 @@ -# Trial Period Expired Exception - -## Problem - -You execute a method from the Bulk Operations library, and the following error is thrown: - -> ERROR_005: The monthly trial period is expired. You can extend your trial by downloading the latest version. You can also purchase a perpetual license on our website. If you already own this license, this error only appears if the license has not been found, you can find additional information on our troubleshooting section (http://bulk-operations.net/trial-period-expired-exception). Contact our support team for more details: info@zzzprojects.com' - -## Solution - -### Cause - -- You are currently evaluating the library and the trial period is expired. -- You have purchased the license but didn't register it correctly. - -### Fix - -#### Trial Period Expired - -You can extend your trial by downloading the latest version. - -The latest version always contains a trial for the current month to allow a company to evaluate our library for several months. - -#### License Badly Registered - -Make sure to follow all recommendation about how to setup your license: [Licensing](/licensing) - -Otherwise contact us: info@zzzprojects.com diff --git a/docs2/pages/troubleshooting/trial.md b/docs2/pages/troubleshooting/trial.md deleted file mode 100644 index 9fcb818..0000000 --- a/docs2/pages/troubleshooting/trial.md +++ /dev/null @@ -1,18 +0,0 @@ -# Trial - -Oops! Your trial has expired. - -### How can I extend my trial? -You can extend your trial for several months by downloading the latest version at the beginning of every month. - - - - Download - - - -### Where is the free version? -There is no free version. - -### How can I purchase a license? -A perpetual license can be purchased from here: Buy diff --git a/docs2/pages/troubleshooting/troubleshooting.md b/docs2/pages/troubleshooting/troubleshooting.md deleted file mode 100644 index d93b2bb..0000000 --- a/docs2/pages/troubleshooting/troubleshooting.md +++ /dev/null @@ -1,11 +0,0 @@ -# Troubleshooting - -## Troubleshooting - -
    -{% for num in (0..site.data.pages.size) %} - {% if site.data.pages[num].category == page.permalink and site.data.pages[num].url != page.permalink %} -
  • {{ site.data.pages[num].title }}
  • - {% endif %} -{% endfor %} -