- Details
- Written by: Stanko Milosev
- Category: C#
- Hits: 6775
Here I already explained what is necessary for creating first step in Mef.
Right click on references choose Manage NuGet Packages
Install Entity Framework
In my case I added a folder, and I called it a model, there I created new class which I called PersonModel
Person model code:
public class PersonModel { [Key] public int PersonId { get; set; } public string LastName { get; set; } public string FirstName { get; set; } public DateTime BirthDate { get; set; } } public class MyTableDBContext : DbContext { public DbSet MyTable { get; set; } }
In App.config add connection string like:
<connectionStrings> <add name="MyTableDBContext" connectionString="Data Source=myServer; Initial Catalog=myDb; Integrated Security=False; Persist Security Info=True; User ID=myUser; Password=myPass" providerName="System.Data.SqlClient" /> </connectionStrings>
Whole code for export in my case looks like:
using System; using System.ComponentModel.Composition; using DbToJson.Model; using System.Linq; namespace DbToJson { public interface IDbToJson { void Seed(); string DbToJson(); } [Export(typeof(IDbToJson))] public class DbToJsonMef : IDbToJson { public string DbToJson() { var db = new MyTableDBContext(); var records = db.MyTable.ToList(); string myJson = ""; foreach (var record in records) { if (myJson == "") { myJson = "[" + "{'PersonId': '" + record.PersonId + "'" + "', 'FirstName': '" + record.FirstName + "'" + "', 'LastName': '" + record.LastName + "'" + "', 'BirthDate': '" + record.BirthDate + "'" + "}"; } else { myJson = myJson + "{'PersonId': '" + record.PersonId + "'" + "', 'FirstName': '" + record.FirstName + "'" + "', 'LastName': '" + record.LastName + "'" + "', 'BirthDate': '" + record.BirthDate + "'" + "}"; ; } } myJson = myJson + "]"; return myJson; } public void Seed() { using (var db = new MyTableDBContext()) { db.MyTable.Add(new PersonModel { FirstName = "Stanko", LastName = "Milosev", BirthDate = DateTime.Now }); db.MyTable.Add(new PersonModel { FirstName = "John", LastName = "Doe", BirthDate = DateTime.Now }); db.MyTable.Add(new PersonModel { FirstName = "John", LastName = "Lennon", BirthDate = DateTime.Now }); db.SaveChanges(); } } } }
I made two parts, one I called seed, that one I need to fill database with some data, the other method is for displaying data in JSON.
Now import looks like:
using System; using System.ComponentModel.Composition; using System.ComponentModel.Composition.Hosting; using DbToJson; namespace SeedAndConvertToJson { class Program { private CompositionContainer _container; [Import(typeof(IDbToJson))] private IDbToJson dbToJson; private Program() { var catalog = new AggregateCatalog(); catalog.Catalogs.Add(new AssemblyCatalog(typeof(Program).Assembly)); catalog.Catalogs.Add(new DirectoryCatalog(@"../../lib")); _container = new CompositionContainer(catalog); try { this._container.ComposeParts(this); } catch (CompositionException compositionException) { Console.WriteLine(compositionException.ToString()); } } static void Main(string[] args) { Program p = new Program(); p.dbToJson.Seed(); Console.WriteLine(p.dbToJson.DbToJson()); Console.ReadKey(); } } }
For the import part we also need to install Entity Framework
- Details
- Written by: Stanko Milosev
- Category: C#
- Hits: 11974
Mef is Managed Extensibility Framework. That means that with MEF we can easily make plugin system.
To write this article mostly I was using this article.
In this my small example I am going to make one class library, called MefExport, and with that library I will display "hello world" message in console, in separate solution, in order to have separated as much as possible.
Then I will make console application, called MefImport where I will use method from MefExport.
Let's first make console application, which we will call MefExport:
Right click on references -> Add Reference...
Choose System.ComponentModel.Composition
Code for export:
using System; using System.ComponentModel.Composition; namespace MefExport { public interface IHelloWorld { string HelloWorld(); } [Export(typeof(IHelloWorld))] public class MefHelloWorld : IHelloWorld { public string HelloWorld() { return "Hello world"; } } }
After building copy export dll in the lib folder. Change line: catalog.Catalogs.Add(new DirectoryCatalog(@"../../lib")); According to where dll is located.
Import:
using System; using System.ComponentModel.Composition; using System.ComponentModel.Composition.Hosting; using MefExport; namespace MefImport { class Program { private CompositionContainer _container; [Import(typeof(IHelloWorld))] private IHelloWorld helloWorld; private Program() { var catalog = new AggregateCatalog(); catalog.Catalogs.Add(new AssemblyCatalog(typeof(Program).Assembly)); catalog.Catalogs.Add(new DirectoryCatalog(@"../../lib")); _container = new CompositionContainer(catalog); try { this._container.ComposeParts(this); } catch (CompositionException compositionException) { Console.WriteLine(compositionException.ToString()); } } static void Main(string[] args) { Program p = new Program(); Console.WriteLine(p.helloWorld.HelloWorld()); Console.ReadKey(); } } }
Example project download from here.
- Details
- Written by: Stanko Milosev
- Category: C#
- Hits: 6457
First I downloaded Oracle Developer Tools for Visual Studio 2015 from here. In my reference list I added Oracle.ManagedDataAccess. My App.config looks like:
<?xml version="1.0" encoding="utf-8" ?> <configuration> <connectionStrings> <add name="maxaDB" connectionString="User ID=userName;Password=pass;Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=ipAddress)(PORT=myPort))(CONNECT_DATA=(SERVER=dedicated)(SERVICE_NAME=XE)))" /> </connectionStrings> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> </startup> </configuration>
User ID and Password have to go before Data Source. Then I added "Oracle.ManagedDataAccess.Client;" in using list, and after that connecting was simple:
string maxaDb = ConfigurationManager.ConnectionStrings["maxaDB"].ConnectionString; OracleConnection conn = new OracleConnection();In using list you will need System.Configuration, as well in references.
- Details
- Written by: Stanko Milosev
- Category: C#
- Hits: 6306
In my case I was receiving this error because I was trying to access configuration in my App.config, like:
string maxaDb = ConfigurationManager.ConnectionStrings["maxaDB"].ConnectionString;
To solve this I had to add System.Configuration assembly:
In your using list add:
using System.Configuration;