# IT:AD:Code First:Entities:Properties # * [[../|(UP)]] {{indexmenu>.#2|nsort tsort}} ### CheckList: Class Properties ### * MUST: mark Scalar Properties as `virtual` to enable improved Change Tracking (by going from Snapshot CT to Proxy POCO Change Tracking, which is based on `IPOCO`/`IEntityWithChangeTracker`). * MUST: mark Collection Navigation Properties as `virtual` to enable lazy loading. * MUST: Navigation Collection properties must implement `ICollection` * SHOULD: As we are working with proxies, can use `private set` for Id, etc: * `public string Id {get; private set;}` * CONSIDER: For properties that need to ignored: * DataAnnotations: `[Ignore]` (see [[IT/AD/Code First/DataAnnotations/]]). * FluentAPI: within `DataContext.OnModelCreating()`: `modelBuilder.Entity().Ignore(t => t.Budget);` (see [[IT/AD/Code First/FluentAPI/Properties/]]) * CONSIDER: For derived calculated properties *that need to be saved*, use empty sets: * `public FullName {get {return _first + " " + _last;} set {}}` * CONSIDER: If you have to turn of Id autogeneration: * DataAnnotations: ? (see [[IT/AD/Code First/DataAnnotations/]]) * FluentAPI: within `DataContext.OnModelCreating()`: `modelBuilder.Entity().Property(t => t.ID).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);` (see [[IT/AD/Code First/FluentAPI/Properties/]])