Problem 1:
Using a random number to generate a primary key is probably a bad idea as eventually you'll end up with clashes, so with the code you have you will run into problems unless you check that every generated key is unique prior to using it.
If you really need random numbers as keys use the sollution below.
Problem 2:
The Random class method Next generates an int, which is 32 bit in your case, this will wrap around and you'll only have half the range intended. Another problem is that the standard Random class is not that a good random generator.
Problem 3:
Using two Int32 generated by Random and shift one (into a long) and append another is not the best way to generate a 64 bit random number, your chances on doubles rise (this is a crypto topic that is beyond this discussion so I'll leave it at that :))
Solution:
To really generate a random Int64 you can use the Random or even better the RandomNumberGenerator to fill an array of 8 bytes for your 64bit number and convert that array to long (Int64) e.g.:
using System.Security.Cryptography;
var rng = RandomNumberGenerator.Create();
//bytes to hold number
var bytes = new byte[8];
//randomize
rng.GetNonZeroBytes(bytes);
//Convert
long random = BitConverter.ToInt64(bytes, 0);
This will generate a true 64 bit random number, the RandomNumberGenerator is a better random generator (less predictable) than the Random class.