Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
The entire Solution structure is shown in the snapshots below
Infrastructure
Domain
Presentation
Using the 'Entity Framework Power Tools Beta 4 (Visual Studios Extension)' we auto-generate the entity classes, mapper classes and the database context class, namely 'StarDesc.cs', 'StarDescMap.cs' and 'StarSystemContext.cs'.
StarDesc.cs
namespace CG.StarSystem.Data.Models
{
public partial class StarDesc
{
public int Id { get; set; }
public string StarName { get; set; }
public string StarSize { get; set; }
public string StarDistanceFromSun { get; set; }
public string StarGalaxyName { get; set; }
public string StarBrightness { get; set; }
public string SpectralType { get; set; }
}
}
StarDescMap.cs
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity.ModelConfiguration;
namespace CG.StarSystem.Data.Models.Mapping
{
public class StarDescMap : EntityTypeConfiguration<StarDesc>
{
public StarDescMap()
{
// Primary Key
this.HasKey(t => t.Id);
// Properties
this.Property(t => t.Id)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
this.Property(t => t.StarName)
.HasMaxLength(150);
this.Property(t => t.StarSize)
.HasMaxLength(50);
this.Property(t => t.StarDistanceFromSun)
.HasMaxLength(50);
this.Property(t => t.StarGalaxyName)
.HasMaxLength(50);
this.Property(t => t.StarBrightness)
.HasMaxLength(50);
this.Property(t => t.SpectralType)
.HasMaxLength(50);
// Table & Column Mappings
this.ToTable("StarDesc");
this.Property(t => t.Id).HasColumnName("Id");
this.Property(t => t.StarName).HasColumnName("StarName");
this.Property(t => t.StarSize).HasColumnName("StarSize");
this.Property(t => t.StarDistanceFromSun).HasColumnName("StarDistanceFromSun");
this.Property(t => t.StarGalaxyName).HasColumnName("StarGalaxyName");
this.Property(t => t.StarBrightness).HasColumnName("StarBrightness");
this.Property(t => t.SpectralType).HasColumnName("SpectralType");
}
}
}
StarSystemContext.cs
using System.Data.Entity;
using CG.StarSystem.Data.Models.Mapping;
namespace CG.StarSystem.Data.Models
{
public partial class StarSystemContext : DbContext
{
static StarSystemContext()
{
Database.SetInitializer<StarSystemContext>(null);
}
public StarSystemContext()
: base("Name=StarSystemContext")
{
// the terrible hack
var ensureDLLIsCopied =
System.Data.Entity.SqlServer.SqlProviderServices.Instance;
}
public DbSet<SpectralClassesSubType> SpectralClassesSubTypes { get; set; }
public DbSet<StarDesc> StarDescs { get; set; }
public DbSet<StarTypeByLuminosityClass> StarTypeByLuminosityClasses { get; set; }
public DbSet<StarTypeBySpectralClass> StarTypeBySpectralClasses { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new SpectralClassesSubTypeMap());
modelBuilder.Configurations.Add(new StarDescMap());
modelBuilder.Configurations.Add(new StarTypeByLuminosityClassMap());
modelBuilder.Configurations.Add(new StarTypeBySpectralClassMap());
}
}
}
IStarDescRepository.cs
using CG.StarSystem.Data.Models;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace CG.StarSystem.Repository.StarDescs
{
public interface IStarDescRepository: IDisposable
{
Task<List<StarDesc>> GetStarDescsAsync();
Task<StarDesc> GetStarDescByIdAsync(int? id);
Task CreateStarAsync(StarDesc stardesc);
Task DeleteStarAsync(int? id);
Task EditStarDescAsync(StarDesc stardesc);
}
}
StarDescRepository.cs
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using CG.StarSystem.Data.Models;
using System.Data.Entity;
namespace CG.StarSystem.Repository.StarDescs
{
public class StarDescRepository : IStarDescRepository, IDisposable
{
private StarSystemContext _context;
/// <summary>
/// Create a new instance of <see cref="StarDescRepository" />.
/// </summary>
/// <param name="transaction">Active transaction</param>
/// <exception cref="ArgumentNullException">transaction</exception>
public StarDescRepository()
{
_context = new StarSystemContext();
}
public async Task<List<StarDesc>> GetStarDescsAsync()
{
return await _context.StarDescs.ToListAsync();
}
public async Task<StarDesc> GetStarDescByIdAsync(int? id)
{
return await _context.StarDescs.FindAsync(id);
}
public async Task CreateStarAsync(StarDesc stardesc)
{
_context.StarDescs.Add(stardesc);
await _context.SaveChangesAsync();
}
public async Task EditStarDescAsync(StarDesc stardesc)
{
_context.Entry(stardesc).State = EntityState.Modified;
await _context.SaveChangesAsync();
}
public async Task DeleteStarAsync(int? id)
{
StarDesc stardesc = await _context.StarDescs.FindAsync(id);
_context.StarDescs.Remove(stardesc);
await _context.SaveChangesAsync();
}
#region IDisposable Support
private bool disposedValue = false; // To detect redundant calls
protected virtual void Dispose(bool disposing)
{
if (!disposedValue)
{
if (disposing)
{
_context.Dispose();
}
disposedValue = true;
}
}
// This code added to correctly implement the disposable pattern.
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
#endregion
}
}
IStarDescService.cs
using CG.StarSystem.Data.Models;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace CG.StarSystem.ApplicationServices
{
public interface IStarDescService : IDisposable
{
Task<List<StarDesc>> GetAllStarsAsync();
Task<StarDesc> GetStarDescriptionByIdAsync(int? id);
Task AddStarAsync(StarDesc stardesc);
Task DeleteStarAsync(int? id);
Task EditStarDescAsync(StarDesc stardesc);
}
}
StarDescService.cs
using CG.StarSystem.Data.Models;
using CG.StarSystem.Repository.StarDescs;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace CG.StarSystem.ApplicationServices
{
public class StarDescService : IStarDescService, IDisposable
{
private readonly IStarDescRepository _StarDescRepository;
//public StarDescService(IStarDescRepository IStarDescRepository) {
// _IStarDescRepository = IStarDescRepository;
//}
public StarDescService()
{
_StarDescRepository = new StarDescRepository();
}
public async Task<List<StarDesc>> GetAllStarsAsync()
{
return await _StarDescRepository.GetStarDescsAsync();
}
public async Task<StarDesc> GetStarDescriptionByIdAsync(int? id)
{
return await _StarDescRepository.GetStarDescByIdAsync(id);
}
public async Task AddStarAsync(StarDesc stardesc)
{
await _StarDescRepository.CreateStarAsync(stardesc);
}
public async Task DeleteStarAsync(int? id)
{
await _StarDescRepository.DeleteStarAsync(id);
}
public async Task EditStarDescAsync(StarDesc stardesc)
{
await _StarDescRepository.EditStarDescAsync(stardesc);
}
#region IDisposable Support
private bool disposedValue = false; // To detect redundant calls
protected virtual void Dispose(bool disposing)
{
if (!disposedValue)
{
if (disposing)
{
_StarDescRepository.Dispose();
}
disposedValue = true;
}
}
// This code added to correctly implement the disposable pattern.
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
#endregion
}
}