Générer un Id numérique avec Linq pourrait sembler simple : "un petit coup de Max + 1 et le tour est joué"... Et bien non! Car quand une table est vide, la méthode Max fait un gros buzzzzzzz "marche pas".
Une bonne pratique consiste donc à compter les lignes existante et dans le cas où il n'y a pas de données initialiser l'Id à 1 :
Int32 Id = DataContext.Table.Count(c => c.Id != 0) > 0 ? DataContext.Table.Max(c => c.Id) + 1 : 1;
Note : le c=> c.id != 0 sert juste à ne pas utiliser la méthode Count(*) de SQL et faire ainsi une petite optimisation (ok ce n'est pas énorme mais c'est toujours ça).