| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
Who wants to write basic read/insert/update/delete statements?
The existing Dapper extensions did not fit my ideal pattern. I wanted simple CRUD operations with smart defaults without anything extra. I also wanted to have models with additional properties that did not directly map to the database. For example - a FullName property that combines FirstName and LastName in its getter - and not add FullName to the Insert and Update statements.
I wanted the primary key column to be Id in most cases but allow overriding with an attribute.
Finally, I wanted the table name to match the class name by default but allow overriding with an attribute.
This extension adds the following 8 helpers:
For projects targeting .NET 4.5 or later, the following 8 helpers exist for async operations:
If you need something more complex use Dapper's Query or Execute methods!
Note: all extension methods assume the connection is already open, they will fail if the connection is closed.
Install via NuGet - https://nuget.org/packages/Dapper.SimpleCRUD
Check out the model generator T4 template to generate your POCOs. Documentation is at https://github.com/ericdc1/Dapper.SimpleCRUD/wiki/T4-Template
public static T Get<T>(this IDbConnection connection, int id)Example basic usage:
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
var user = connection.Get<User>(1); Results in executing this SQL
Select Id, Name, Age from [User] where Id = 1 More complex example:
[Table("Users")]
public class User
{
[Key]
public int UserId { get; set; }
[Column("strFirstName"]
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
}
var user = connection.Get<User>(1); Results in executing this SQL
Select UserId, strFirstName as FirstName, LastName, Age from [Users] where UserId = @UserIDNotes:
The [Key] attribute can be used from the Dapper namespace or from System.ComponentModel.DataAnnotations
The [Table] attribute can be used from the Dapper namespace, System.ComponentModel.DataAnnotations.Schema, or System.Data.Linq.Mapping - By default the database table name will match the model name but it can be overridden with this.
The [Column] attribute can be used from the Dapper namespace, System.ComponentModel.DataAnnotations.Schema, or System.Data.Linq.Mapping - By default the column name will match the property name but it can be overridden with this. You can even use the model property names in the where clause anonymous object and SimpleCRUD will generate a proper where clause to match the database based on the column attribute
GUID (uniqueidentifier) primary keys are supported (autopopulates if no value is passed in)
public static IEnumerable<T> GetList<T>(this IDbConnection connection)Example usage:
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}var user = connection.GetList<User>(); Results in
Select * from [User]public static IEnumerable<T> GetList<T>(this IDbConnection connection, object whereConditions)Example usage:
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
var user = connection.GetList<User>(new { Age = 10 }); Results in
Select * from [User] where Age = @AgeNotes:
public static IEnumerable<T> GetList<T>(this IDbConnection connection, string conditions)Example usage:
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
var user = connection.GetList<User>("where age = 10 or Name like '%Smith%'"); Results in
Select * from [User] where age = 10 or Name like '%Smith%'Notes:
public static IEnumerable<T> GetListPaged<T>(this IDbConnection connection, int pageNumber, int rowsPerPage, string conditions, string orderby)Example usage:
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
var user = connection.GetListPaged<User>(1,10,"where age = 10 or Name like '%Smith%'","Name desc"); Results in (SQL Server dialect)
SELECT * FROM (SELECT ROW_NUMBER() OVER(ORDER BY Name desc) AS PagedNumber, Id, Name, Age FROM [User] where age = 10 or Name like '%Smith%') AS u WHERE PagedNUMBER BETWEEN ((1 - 1) * 10 + 1) AND (1 * 10)Notes:
public static int Insert(this IDbConnection connection, object entityToInsert)Example usage:
[Table("Users")]
public class User
{
[Key]
public int UserId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
//Additional properties not in database
[Editable(false)]
public string FullName { get { return string.Format("{0} {1}", FirstName, LastName); } }
public List<User> Friends { get; set; }
[ReadOnly(true)]
public DateTime CreatedDate { get; set; }
}
var newId = connection.Insert(new User { Name = "User", Age = 10 }); Results in executing this SQL
Insert into [Users] (FirstName, LastName, Age) VALUES (@FirstName, @LastName, @Age)Notes:
public static int Update(this IDbConnection connection, object entityToUpdate)Example usage:
[Table("Users")]
public class User
{
[Key]
public int UserId { get; set; }
[Column("strFirstName")]
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
//Additional properties not in database
[Editable(false)]
public string FullName { get { return string.Format("{0} {1}", FirstName, LastName); } }
public List<User> Friends { get; set; }
}
connection.Update(entity);Results in executing this SQL
Update [Users] Set (strFirstName=@FirstName, LastName=@LastName, Age=@Age) Where ID = @IDpublic static int Delete<T>(this IDbConnection connection, int Id)Example usage:
public class User
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
}
connection.Delete<User>(newid);Or
public static int Delete<T>(this IDbConnection connection, T entityToDelete)Example usage:
public class User
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
}
connection.Delete(entity);Results in executing this SQL
Delete From [User] Where ID = @IDpublic static int DeleteList<T>(this IDbConnection connection, string conditions, IDbTransaction transaction = null, int? commandTimeout = null)Example usage:
connection.DeleteList<User>("Where age > 20");public static int RecordCount<T>(this IDbConnection connection, string conditions = "")Example usage:
var count = connection.RecordCount<User>("Where age > 20"); SimpleCRUD.SetDialect(SimpleCRUD.Dialect.PostgreSQL);
SimpleCRUD.SetDialect(SimpleCRUD.Dialect.SQLite);Dapper.SimpleCRUD has a basic test suite in the test project
There is also a sample website showing working examples of the the core functionality in the demo website
I am considering the following based on feedback:
| Back | FazBrowse Home | New Git URL |