2017-09-12 6 views
0

J'ai une table qui a le code comme clé primaire au lieu de Id, Lorsque j'appelle la méthode DeleteAsync, j'obtiens l'exception Message = "Cannot update identity column 'Id'.".Impossible de supprimer l'enregistrement de la table qui a la colonne Identité

[Table("Test")] 

public class Test: FullAuditedEntity<int> 

{ 

[DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
new public int Id { get; set; } 
[Key] 
[DatabaseGenerated(DatabaseGeneratedOption.None)] 
public virtual int Code { get; set; } 

public async Task DeleteTest(int code) 
    { 


     try 
     { 
      await _supplierRepository.DeleteAsync(p => p.Code== code); 
     } 
     catch (Exception ex) 
     { 

     } 
    } 

Mais si je retire Id colonne de la table, il fonctionne très bien. Je veux la colonne Id et la colonne Code comme PK.

Répondre

0

Il est recommandé d'utiliser Id comme PK et de faire d'autres colonnes une contrainte unique. Donc, si vous utilisez Id comme PK, vous ne rencontrerez pas ces problèmes.

2

Ce qui se passe est, par FullAuditedEntity<int> crée automatiquement un champ Id de nombre entier. Vous n'êtes pas obligé de le faire:

[DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
new public int Id { get; set; } 

Si vous souhaitez créer une table avec une clé composite, allez-y et ajoutez simplement votre code de champ sans répliquer le champ Id. Alors vous n'aurez aucun problème.