2011-02-10 2 views
0

J'ai cette entité fellowing:Entité et mappage à l'aide d'Entity Framework 4 comment gérer null (ICollection)?

public class Post 
    { 
     public long PostId { get; private set; } 
     public DateTime date { get; set; } 
     [Required] 
     public string Subject { get; set; } 
     public User User { get; set; } 
     public Category Category { get; set; } 
     [Required] 
     public string Body { get; set; } 

     public virtual ICollection<Tag> Tags { get; private set; } 

     public Post() 
     { 
      Category = new Category(); 
     } 

     public void AttachTag(string name, User user) 
     { 
      if (Tags.Count(x => x.Name == name) == 0) 
       Tags.Add(new Tag { 
        Name = name, 
        User = user 
       }); 
      else 
       throw new Exception("Tag with specified name is already attached to this post."); 
     } 

     public Tag DeleteTag(string name) 
     { 
      Tag tag = Tags.Single(x => x.Name == name); 
      Tags.Remove(tag); 

      return tag; 
     } 

     public bool HasTags() 
     { 
      return (Tags != null || Tags.Count > 0); 
     } 

Le problème est avec ICollection virtuel Mots clés {get; ensemble privé; }

Lorsqu'il n'y a pas de balises à l'intérieur, il est réellement affiché comme nul. Je ne peux pas l'initialiser car il doit être virtuel.

Comment gérer les valeurs nulles dans les entités? Comment les balises sont initialisées et où?

Merci.

Répondre

3

Vous pouvez initialiser (en fait vous devez) même si c'est virtuel. Ceci est un code qui est généré à partir du modèle POCO T4:

[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Csob.Arm.EntityGenerator", "1.0.0.0")] 
public virtual ICollection<TransactionCodeGroup> TransactionCodeGroups 
{ 
    get 
    { 
     if (_transactionCodeGroups == null) 
     { 
      _transactionCodeGroups = new FixupCollection<TransactionCodeGroup>(); 
     } 
     return _transactionCodeGroups; 
    } 
    set 
    { 
     _transactionCodeGroups = value; 
    } 
} 
private ICollection<TransactionCodeGroup> _transactionCodeGroups; 

Comme vous le voyez collection est initialisé lors de getter est d'abord appelé.

+0

Vous avez raison, c'était mon erreur. – Rushino

Questions connexes