First we create the entity that we want to map:
public class ReadOnlyCampus { public long UniversityCampusId { get; set; } public long UniversityId { get; set; } public string CampusName { get; set; } public bool IsActive { get; set; } }
Then we create a new partial class for Database Context file. We could save this file as 'Partial_StudentContext.cs' if the main partial class (generated one) is 'StudentContext.cs'. This is so that our manual mappings and configurations will not be overwritten when we run 'Scaffold-DbContext' command next time.
public partial class StudentContext { // add the DbSet for the entity public virtual DbSet<ReadOnlyCampus> ReadOnlyCampuses { get; set; } // this is extension from the partial method OnModelCreatingPartial(ModelBuilder modelBuilder) declared in the main context file partial void OnModelCreatingPartial(ModelBuilder modelBuilder) { modelBuilder.Entity<ReadOnlyCampus>(entity => { entity.HasNoKey(); // indicate that this entity does not have a primary key entity.ToTable("UniversityCampus"); // map to the Database Table 'UniversityCampus' // map the properties that we need entity.Property(e => e.UniversityCampusId).HasColumnName("UniversityCampusId"); entity.Property(e => e.UniversityId).HasColumnName("UniversityId"); entity.Property(e => e.CampusName).HasColumnName("CampusName"); entity.Property(e => e.IsActive).HasColumnName("IsActive"); }); } public override int SaveChanges() { // we make sure that this entity cannnot be changed foreach (var entry in ChangeTracker.Entries<ReadOnlyCampus>()) { switch (entry.State) { case EntityState.Added: case EntityState.Modified: case EntityState.Deleted: entry.State = EntityState.Unchanged; break; } } return base.SaveChanges(); } }
Then we will be able to query this entity like other normal EF entity.