public IEnumerable <T> PickRandom<T>(IEnumerable<T> list, int number)
{
var random = new Random();
var total = list.Count();
var required = number;
foreach (var item in list)
{
if (random.Next(total) < required)
{
required--;
yield return item;
if (required == 0)
{
break;
}
}
total--;
}
}
How to select N Random Items from the List in C#
How to Temporarily disable all foreign key constraints
While working with MSSQL and Asp.net Core with Entity Framework, many times we have came across a situation where we have to migrate data from one database to newly created database. e.g. Copying all the data from Production DB to Testing DB.
- Using Entity Framework Code First approach, we create database
- Once database is created, need to copy all the data from MSSQL (Generate script > Dataonly); create Database script for the data
- Now while running the script generated from PROD db to Test DB (there could me some modifications in test db, some columns are added) , we need to disable foreign key constraint and then re-enable foreign key constraints
How to disable all the foreign key constraints in MSSQL and then again re-enable all the foreign key constraints in MSSQL
-- Disable all the constraint in database
EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all'
-- Enable all the constraint in database
EXEC sp_msforeachtable 'ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all'
This is the most easiest way to Disable and Enable all the Foreign key constraints on MSSQL. Calculate next due date based on start date frequency and current date in c#
Company has clients, each has different invoice start date and invoice frequency. I had to calculate and display next invoice date from current date + next month. i.e. invoice will always be raised in next month of service completion. e.g. Client A has invoice start date 01-Jan-2021 and invoice frequency is 5 months. Date when I am writing this post is 17-April-2021. So now next invoice date for Client A is 01-June-2021. For client B invoice start date is 01-March-2021 and invoice frequency is 3 months, then its next invoice date is 01-June-2021 and so on for all other client.
public class DateHelper
{
public static DateTime nextInvoiceDate(DateTime? InvoicingStartDate,
string invoicingFrequency)
{
int occurrence =
(DateTime.Now.Month - Convert.ToInt32(InvoicingStartDate?.Month))
/ Convert.ToInt32(invoicingFrequency);
int restInt =
(DateTime.Now.Month - Convert.ToInt32(InvoicingStartDate?.Month))
% Convert.ToInt32(invoicingFrequency);
DateTime next = InvoicingStartDate.Value;
int multi;
if (restInt == 0 && DateTime.Now < InvoicingStartDate)
{
if (Convert.ToInt32(invoicingFrequency) == 1 && occurrence < 0)
{
multi = 1;
}
else
{
multi = Convert.ToInt32(invoicingFrequency)
* Math.Abs(occurrence);
}
}
else
{
if (Convert.ToInt32(invoicingFrequency) == 1)
{
multi = Convert.ToInt32(invoicingFrequency)
* (Math.Abs(occurrence));
}
else
{
multi = Convert.ToInt32(invoicingFrequency)
* (Math.Abs(occurrence) + 1);
}
}
return next.AddMonths(multi);
}
}
- How to calculate a future date based on a given date ?
- Calculate next due date based on start date frequency and current date ?
- How to nearest future date from given date and frequency ?
- Best way to calculate next date from start plus frequency
- How to calculate next meeting date based on given frequency ?
The razortaghelper task failed unexpectedly
After updating Visual studio to New version, I suddenly started getting error
the razortaghelper task failed unexpectedly
Well after doing some research on Internet I came across following solutions
Added the following environment variable to my user environment to make it build again:
DOTNET_HOST_PATH%ProgramFiles%\dotnet\dotnet.exe
Simply go to Environment Variable, check following images
After clicking on Environment Variables, click on New, Pop up will open up, simply add entries as per following image and click Ok
How to compile Less, sass/scss, JSX, ES6, CoffeeScript in visual studio
It is very easy to compile LESS and SCSS files in visual studio. To do this we have to use Web Compiler extension. Web compiler extension generates css file from LESS and SCSS files on run time.
Lets Install the Extension
- Compilation of LESS, Scss, Stylus, JSX, ES6 and CoffeeScript files
- Saving a source file which triggers re-compilation automatically
- Specify compiler options for each individual file
- Error list is integrated
- MSBuild support for CI scenarios
- Minify the compiled output
- Customizable minification options for each language
- Displays a watermark when opening generated file
- Shortcut to compile all specified files in solution
- Task runner explorer is integrated
- Command line interface
.less
, .scss
, .styl
, .jsx
, .es6
or .coffee
@import 'variabls'; @import 'mixin'; @import 'common'; @import 'element/button'; @import 'section/header'; @import 'section/slider'; @import 'section/banner'; @import 'section/product'; @import 'section/blog'; @import 'section/newsletter'; @import 'section/shipping'; @import 'section/testimonial'; @import 'section/brand'; @import 'section/footer'; @import 'section/shop'; @import 'section/product-details'; @import 'section/cart-page'; @import 'section/checkout'; @import 'section/wishlist'; @import 'section/contact'; @import 'section/login'; @import 'section/faq'; @import 'section/my-account'; @import 'section/about'; @import 'section/services'; @import 'section/blog-page'; @import 'section/blog-details'; @import 'section/quick-view'; @import 'section/newsletter-popup'; @import 'section/404'; @import 'section/privacy-policy';Now simply right click on the style.scss file and click on Web Compiler > Compile file.
[ { "outputFile": "wwwroot/assets/css/style.css", "inputFile": "wwwroot/assets/scss/style.scss" } ]We can always change the outputFile path to our css folder, I have changed it in this example to css file. Similary there is one more file named compilerconfig.json.defaults which get generated and can be used to configure minification of js/css, check following file and you can modify it as per your requirements
{ "compilers": { "less": { "autoPrefix": "", "cssComb": "none", "ieCompat": true, "strictMath": false, "strictUnits": false, "relativeUrls": true, "rootPath": "", "sourceMapRoot": "", "sourceMapBasePath": "", "sourceMap": false }, "sass": { "autoPrefix": "", "includePath": "", "indentType": "space", "indentWidth": 2, "outputStyle": "nested", "Precision": 5, "relativeUrls": true, "sourceMapRoot": "", "lineFeed": "", "sourceMap": false }, "stylus": { "sourceMap": false }, "babel": { "sourceMap": false }, "coffeescript": { "bare": false, "runtimeMode": "node", "sourceMap": false }, "handlebars": { "root": "", "noBOM": false, "name": "", "namespace": "", "knownHelpersOnly": false, "forcePartial": false, "knownHelpers": [], "commonjs": "", "amd": false, "sourceMap": false } }, "minifiers": { "css": { "enabled": true, "termSemicolons": true, "gzip": false }, "javascript": { "enabled": true, "termSemicolons": true, "gzip": false } } }This is how we can compile Less, sass/scss, jsx, CoffeeScript in visual studio, we can also use this web pack to minify JS files.
The entity type 'IdentityUserLogin' requires a primary key to be defined.
InvalidOperationException: The entity type 'IdentityUserLogin<string>' requires a primary key to be defined.I was doing following thing in my application
- I wanted to set Unique Key constraint on Email for my two models i.e. Vendor and Member model so I had added code below in my ApplicationDbContext file. (You may have different name for your DbContext file.)
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
protected override void OnModelCreating(ModelBuilder builder)
{
builder.Entity<Member>().HasIndex(m => m.Email).IsUnique();
builder.Entity<Vendor>().HasIndex(v => v.Email).IsUnique();
}
public DbSet<Vendor> Vendors { get; set; }
public DbSet<Member> Members { get; set; }
}
Here if we see closely, I am missing base model Creating function. When I build and run code I get error saying InvalidOperationException: The entity type 'IdentityUserLogin' requires a primary key to be defined.
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
protected override void OnModelCreating(ModelBuilder builder)
{
builder.Entity<Member>().HasIndex(m => m.Email).IsUnique();
builder.Entity<Vendor>().HasIndex(v => v.Email).IsUnique();
base.OnModelCreating(builder);
}
public DbSet<Vendor> Vendors { get; set; }
public DbSet<Member> Members { get; set; }
}