After working with a database project in Visual Studio, I thought it was probably time to create a simple console application to interact with the database using the current version of Entity Framework (v6.0).
So as we’ve already created the cddb database in a previous post, we’ll simply create a new console project and work with that DB.
- Create your application, as stated mine is a console application
- Add new item and select Data | ADO.NET Entity Data Model, mine’s named CddbContext (as this will include the source for the data context created for EF)
- Select Code First from database
- Create a new connection and supply the relevant details for your database connection
- Press next then select the tables (and views) you want to generate code for – then click Finish
Here’s the code generated
CddbContext.cs
public partial class CddbContext : DbContext { public CddbContext() : base("name=CddbContext") { } public virtual DbSet<album> albums { get; set; } public virtual DbSet<artist> artists { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity<artist>() .HasMany(e => e.albums) .WithRequired(e => e.artist) .WillCascadeOnDelete(false); } }
artist.cs
[Table("artist")] public partial class artist { [System.Diagnostics.CodeAnalysis.SuppressMessage( "Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")] public artist() { albums = new HashSet<album>(); } public int Id { get; set; } [Required] [StringLength(50)] public string Name { get; set; } [System.Diagnostics.CodeAnalysis.SuppressMessage( "Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] public virtual ICollection<album> albums { get; set; } }
album.cs
[Table("album")] public partial class album { public int Id { get; set; } [Required] [StringLength(50)] public string Title { get; set; } public int ArtistId { get; set; } public virtual artist artist { get; set; } }
finally let’s create a simple but of code to get the artists from the database, so in Main we have
using (var db = new CddbContext()) { var artists = db.artists; foreach (var a in artists) { Console.WriteLine(a.Name); } }
If your database schema changes you will need to re-run the steps to generate your data context etc. or code by hand. There isn’t (currently) a way to update existing classes – so don’t make changes to the generated code and expect it to still exist after regeneration.