Модуль объяснения
#Bouyei.DbFactory на основе .NET Framework 4.6.1+
#Bouyei.DbFactoryCore на основе .NET Core 2.2+
#Bystd.DbFactory на основе .NET Standard 2.0+
Пакет
Пакет | NuGet |
---|---|
Bouyei.DbFactory | |
Bouyei.DbFactoryCore | |
Bystd.DbFactory |
Пример использования Linq-выражений или прямого выполнения SQL-запросов
string connectionString = "Data Source=.;Initial Catalog=testdb;User ID=sa;Password=bouyei;";
IAdoProvider adoProvider = AdoProvider.CreateProvider(connectionString);
var rt = adoProvider.Query(new Parameter()
{
CommandText = "select * from MemUser"
});
// Удаление
var del = adoProvider.Delete<user>(x => x.uname == "hkj" && (x.sex == Sex.Female || x.uage == 30));
// Динамическая вставка объекта
var irt = dbProvider.Insert<User>(x => new
{
uname = "hello",
id = 11
});
// Динамическое обновление объекта
var urt = dbProvider.Update<User>(x => new
{
uname = "bouyei_hello"
}, w => w.id == 11);
// Вставка с использованием DbParameter для полей типа blob и других случаев
var p = dbProvider.InsertParameter<User>(new User()
{
uname = "bouyei",
uage = 33,
score = 23.44f
});
// Запрос с использованием like '%bouyei%'
var users = adoProvider.Query<user>(x => x.name.Contains("bouyei"));
// Разбиение на страницы, возврат динамических объектов
string[] orderbyColumn = new string[] { "uname" };
var qrt = dbProvider.QueryOrderBy<User>(x => true,
c => new { c.uname, c.id }, /* динамические столбцы возвращаются */
orderbyColumn, SortType.Desc, 0, 10);
foreach (DataRow dr in rt.Result.Rows)
{
Console.WriteLine(string.Join(",", dr.ItemArray));
}
// Массовая загрузка данных
fc3d[] fc = new fc3d[]
{
new fc3d() { fname = "dd", fcode = 121 },
new fc3d() { fname = "sd", fcode = 23 },
new fc3d() { fname = "个", fcode = 2323 }
};
var param = new CopyParameter<Array>(fc);
param.TableName = "fc3d";
var rt = adoProvider.BulkCopy(param);
**Наследование TableMapper для реализации ORM сущностей**
Пример использования 1:
private void execute()
{
UserDto user = new UserDto()
{
UserName = "bouyei"
};
user.Insert(user);
}
Пример использования 2:
public class DbMapperService : BaseEntity<UserDto>
{
public int Insert(UserDto user)
{
return Insert(user);
}
public int UpdateDo(UserDto dto, Expression<Func<UserDto, bool>> whereClause)
{
return Update(dto, whereClause);
}
}
[MappedName("db_user")]
public class UserDto : BaseEntity<UserDto>
{
public string UserName { get; set; }
[Ignore]
public string Pwd { get; set; }
}
public class BaseEntity<T> : TableMapper<T> where T : class
{
public BaseEntity()
{
string connstr = "Host=127.0.0.1;Port=5432;User id=postgres;Password=bouyei;Database=postgres;";
var provider = AdoProvider.CreateProvider(connstr, FactoryType.PostgreSQL);
Initilize(provider);
}
}
**Использование выражений для генерации SQL-скриптов**
Группировка:
string sqlgroupby = sqlProvider.Select<User>().Count().From<User>()
.Where(x => x.uage == 1).GroupBy<User>().SqlString;
Использование IN:
string[] values = new string[] { "a", "b" };
var inSql = sqlProvider.Select<User>().From().Where(x => values.Contains(x.uname)).SqlString;
LIKE с подстановочным знаком в начале:
var beginSql = sqlProvider.Select<User>().From().Where(x => x.uname.StartsWith("bouyei") || x.uname.StartsWith("bb")).SqlString;
LIKE с подстановочными знаками в конце:
var endSql =
``` ```
sqlProvider.Select<User>().From().Where(x => x.uname.EndsWith("bouyei")).SqlString;
//select count(*) from user where id=1
string commandText = sqlProvider.Select<User>(new Count("*")).From<User>().Where(x=>x.id==1).SqlString;
//function
string sqlfun = sqlProvider.Select<User>(new Max("age")).From<User>().Where(x=>x.uage>20).SqlString;
//order by
var osql = sqlProvider.Select<User>().From<User>().OrderBy(SortType.Asc, "name").SqlString;
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )