EasyDb.NET is a simple project that helps you with features:
- Easy. IDbConnection is extended by a new interface IConnection with enhanced query methods. Similar code, different experience. Helper methods may still be used to get rid of the repeating trivia such as opening and closing connections and make coding clean and simple.
- Cross-database. EasyDb.NET works across all .NET ADO providers. Most times you don't need to concern details of DB specific differences since there is the hibernate-like dialecting.
- Typed query. Query results can be mapped into strongly typed or dynamic objects. ORMs can also be customized with help of Mapping attributes.
- Support OO-style Criterion query.
- Other features from Dapper. EasyDb.NET is internally driven by Dapper, an amazing project by Sam Saffron.
- Support .NET 2.0, 3.0, 3.5, 4.0.
Define a compile symbol NET20 to build for .NET 2.0, CSHARP30 for .NET 3.0. By default the project is targeted to .NET 3.5 and above.
A IConnectionFactory or the static helper class EasyDbHelper is needed for open querying connections.
Using IConnectionFactory
IConnectionFactory factory;
// build factory with given DbProviderFactory and Dialect.
factory = ConnectionFactoryBuilder.NewBuilder(
System.Data.SQLite.SQLiteFactory.Instance,
"Data Source=test.db;Pooling=true;FailIfMissing=false",
"SQLiteFactory",
new SQLiteDialect()
).Build();
// or build from strings
factory = ConnectionFactoryBuilder.NewBuilder(
"mysql.data",
"Server=127.0.0.1;Uid=root;Pwd=asdf;Database=sample;",
"MySQLFactory",
"LX.EasyDb.Dialects.MySQLDialect"
).Build();
Connections could be accquired from the factory then:
IConnection connection = factory.OpenConnection();
Or using the static EasyDbHelper
The EasyDbHelper should also be initialized before any use. By programming it will be like:
EasyDbHelper.Initialize("mysql.data",
"Server=127.0.0.1;Uid=root;Pwd=asdf;Database=sample;",
"LX.EasyDb.Dialects.MySQLDialect");
Or by app configuration:
<configuration>
<configSections>
<section name="EasyDb" type="LX.EasyDb.Configuration.EasyDbConfiguration, EasyDb.NET"/>
</configSections>
<EasyDb>
<add name="SampleSqlServer" connectionString="sqlServerConnStr"
provider="System.Data.SqlClient, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
</EasyDb>
<connectionStrings>
<add name="sqlServerConnStr" connectionString="Data Source=localhost;Initial Catalog=Test;Integrated Security=True"/>
</connectionStrings>
</configuration>
Then the static helper methods are ready to use.
int rowsAffected = EasyDbHelper.ExecuteNonQuery(sql);
Object result = EasyDbHelper.ExecuteScalar(sql);
IDataReader reader = EasyDbHelper.ExecuteReader(sql);
IConnection connection = EasyDbHelper.OpenConnection();
Query objects with IConnection
Besides the conventional executing methods (ExecuteNonQuery, ExecuteScalar and ExecuteReader), IConnection provides 4 kinds of querying. Advanced features and performance could be found at Readme-Dapper.
class User
{
public Int32 Id { get; set; }
public String Username { get; set; }
public String Password { get; set; }
}
connection.insert(new User() { Username = "user", Password = "pass" });
User user = connection.Find<User>(1);
connection.insert("User", new User() { Username = "user", Password = "pass" });
IDictionary<String, Object> obj = connection.Find("User", 1);
public interface IUser
{
Int32 Id { get; set; }
String Username { get; set; }
String Password { get; set; }
}
connection.Insert(typeof(IUser), new { Username = "user", Password = "pass" });
Object user = connection.Find(typeof(IUser), 1);
EasyDb.NET implements a set of hibernate-like criterion query interfaces, which allows OO style query.
User user = connection.CreateCriteria<User>()
.Add(Clauses.Eq("id", id))
.SingleOrDefault();
By default objects will be mapped to relational tables with the same names defined in classes and properties. EasyDb.NET providers a few attributes to customize the mapping.
For example, the class User mentioned above will be mapped to the table "User" by default. To map it to the table "sample_users", add attributes as below:
[Mapping.Table(Name = "sample_users")]
class User
{
[Mapping.Column(Name = "id", DbType = DbType.Identity)]
[Mapping.PrimaryKey]
public Int32 Id { get; set; }
[Mapping.Column(Name = "username")]
public String Username { get; set; }
[Mapping.Column(Name = "pwd")]
public String Password { get; set; }
}
EasyDb.NET used to have a feature of multi-databases manipulation, support master/slave databases operations, which has been removed because lack of support.
See [License] (License.txt) for more info.
EasyDb.NET is internally driven by Dapper, an amazing object mapper for .Net by Sam Saffron. Thanks to the author and the great job.