2013-05-14 4 views
0

J'utilise EF 4.4 + Code First.Comment ajouter une entité avec une association un à un dans Entity Framework Code première approche?

J'essayais d'ajouter une entité ChartofAccount à DBContext avec la clé de la société remplie, mais il me demandait de remplir le nom CompanyName de la société ainsi qu'à la validation. Je pensais que DBContext rechercherait la société associée pour moi, au lieu d'essayer d'ajouter une nouvelle société?

public class ChartofAccount: MasterData 
    { 
     public ChartofAccount() 
     { 
      Company = new Company(); 
      Category1 = new AccountCatagory(); 
      Category2 = new AccountCatagory(); 
     } 

     [Key] 
     [Required] 
     public string Code { get; set; } 

     public virtual Company Company { get; set; } 

     [Required] 
     public string AccountName { get; set; } 

     [Required] 
     [StringLength(3)] 
     public string AccountCurrency { get; set; } 

     public virtual AccountCatagory Category1 { get; set; } 

     public virtual AccountCatagory Category2 { get; set; } 

     public string Reference { get; set; } 

     public bool HasTransaction { get; set; } 


    } 

public class Company : MasterData 
    { 
     [Key] 
     public int Id { get; set; } 

     [Required] 
     public string CompanyName { get; set; } 

     [Required] 
     DateTime CurrentAccountPeriod { get; set; } 

     [Required] 
     [StringLength(3)] 
     public string BaseCurrencyCode { get; set; } 
    } 

Répondre

1

Malheureusement, seule la clé primaire d'une entité associée n'est pas suffisante. Vous devez effectuer un aller-retour dans la base de données pour obtenir l'entité dans le même contexte de données.

Exemple:

var Company = db.Company.Single(d => d.ID == id); 
ChartofAccountToAdd.Company = Company; 
db.ChartofAccount.Add(ChartofAccountToAdd); 
db.SubmitChanges(); 

Cela va créer la relation avec une entreprise déjà existante.

EDIT:

j'ai complètement oublié quand je répondu. Modifier votre modèle ChartOfAccount pour contenir la clé étrangère pour la Company comme:

public class ChartofAccount: MasterData 
    { 

     {rest of your model} 

     public int CompanyID { get; set; } 

    } 

puis définir la clé étrangère à cette nouvelle propriété int. Entity Framework créera la relation sans problèmes. Ne définissez rien à la propriété Company sur le modèle.

+0

très triste en effet. Puis-je utiliser l'API Fluent pour automatiser ce processus? –

+0

Je ne pense pas. L'API Fluent est utilisée pour définir la structure de la base de données plutôt que d'automatiser les tâches de base de données. –

+0

Merci Steven. –

Questions connexes