.NET Core Dapper 에서 mysql 데이터 베 이 스 를 조작 하 는 실현 방법
현재 ORM 이 성행 하고 있 으 며,시장 에는 이미 N 개의 서로 다른 ORM 세트 가 나 타 났 다.오늘 우 리 는 EF 도 말 하지 않 고,신마 다크호스 도 말 하지 않 고,Dapper 에 대해 이야기 합 시다.어떻게.NET Core 에서 Dapper 를 사용 하여 Mysql 데이터 베 이 스 를 조작 합 니까?우 리 는 화면(수 동 으로 아래 를 뒤 집 습 니 다)을 따라 끝까지 봅 시다.
구성 편
속담 에 이 르 기 를 잘 하려 면 그 일 을 잘 하려 면 그 그릇 을 먼저 이 롭 게 해 야 한다 고 한다.우선 MySql.Data 의 Nuget 패 키 지 를 도입 해 야 합 니 다.누 군가 흑인 얼굴 이 나 왔 을 지 어떻게 끌 어 들 였 을 까?좋아,네 뼈 가 놀 라 운 것 을 보면 내 가 너 에 게 두 가지 방식 을 알려 줄 게.
첫 번 째 방식
Install-Package MySql.Data -Version 8.0.15
위 명령 행 을 복사 하여 패키지 관리 콘 솔 에서 실행 합 니 다.뭐라고 요?패키지 관리 콘 솔 이 뭔 지 모 르 세 요?OMG,좋아,네 뼈 가 놀 라 운 것 을 봐 서 내 가 알려 줄 게.핸드 포인트 경로:도구→NuGet 패키지 관리자 →패키지 관리 콘 솔
두 번 째 방식
핸드 포인트 경로:가방 을 도입 해 야 할 항목 의 의존 항목 을 오른쪽 클릭→NuGet 패키지 관리 →탐색 에 MySql.Data 입력
직접 설치 하면 됩 니 다.제 가 설 치 했 기 때문에 여 기 는 마 운 트 해제 나 업데이트 입 니 다.
같은 방식 으로 도입 해 야 합 니 다.
Microsoft.AspNetCore.All
MySql.Data.EntityFrameworkCore、
Dapper
Microsoft.Extensions.Configuration.Abstractions
Microsoft.Extensions.Configuration.FileExtensions
Microsoft.Extensions.Configuration.Json
교수 편.NET Core 를 해 본 사람들 은 모두 프로필 을 알 고 있 습 니 다.우 리 는 보통 apptsettings.json 파일 에 두 지만 문제 가 있 습 니 다.만약 에 우리 가 데이터베이스 연결 문자열 을 사용 하면 명문 user name 과 password 를 직접 저장 합 니 다.정말 안전 합 니까?여기 서 우 리 는 안전성 에 대해 토론 하지 않 습 니 다.우 리 는 연결 문자열 에서 자리 표시 자 를 사용 하여 다 중 데이터 베 이 스 를 제어 한 다음 에 userName 과 passWord 로 우리 의 비밀 번 호 를 충당 합 니 다.그래서 이렇게 보 입 니 다.
"ConnectionStrings": {
"DefaultConnection": "server= ;port= ;database=regatta{0};SslMode=None;uid=userName;pwd=passWord;Allow User Variables=true"
},
다음은 Configuration 을 읽 고 MySqlConnection 을 설정 하 는 BaseRepository 를 새로 만 듭 니 다.
public class BaseRepository : IDisposable
{
public static IConfigurationRoot Configuration { get; set; }
private MySqlConnection conn;
public MySqlConnection GetMySqlConnection(int regattaId = 0, bool open = true,
bool convertZeroDatetime = false, bool allowZeroDatetime = false)
{
IConfigurationBuilder builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json");
Configuration = builder.Build();
string cs = Configuration.GetConnectionString("DefaultConnection");
cs = regattaId == 0 ? string.Format(cs, string.Empty) : string.Format(cs, "_" + regattaId.ToString());
cs = cs.Replace("userName", " ").Replace("passWord", " ");
var csb = new MySqlConnectionStringBuilder(cs)
{
AllowZeroDateTime = allowZeroDatetime,
ConvertZeroDateTime = convertZeroDatetime
};
conn = new MySqlConnection(csb.ConnectionString);
return conn;
}
public void Dispose()
{
if (conn != null && conn.State != System.Data.ConnectionState.Closed)
{
conn.Close();
}
}
}
자,생 성 이 완료 되 었 습 니 다.우 리 는 어떻게 사용 해 야 합 니까?예 를 들 어 현재 Crew Manager Repository 류 가 데이터 베 이 스 를 조작 하 는 데 사용 되 고 있 습 니 다.우 리 는 이러한 종류의 BaseRepository 를 계승 하기 만 하면 됩 니 다.예 를 들 어 다음 과 같 습 니 다.
/// <summary>
/// Id、 Id
/// </summary>
/// <param name="regattaId"> Id</param>
/// <param name="userId"> Id</param>
/// <returns></returns>
public async Task< > FindUserByAccount(int regattaId, int userId)
{
try
{
var cmdText =
@"select b.id_number as IdentifierId,b.isvalid as Isvalid,a.name as Name,a.userid as InternalId,a.sex as Sexual,a.sex as SexTypeId,a.age as Age,
c.isprofessional as IsProfessional,c.role_type as RoleTypeId,a.weight as Weight,a.height as Height, a.phone as PhoneNumber,a.thumb_image as ThubmnailImage,
a.image as Image,c.athlete_id as AthleteId from 1 a left join 2 b on a.userid=b.id
left join 3 c on b.id=c.centralid where a.userid=@userId;";
// regattaId
using (var conn = GetMySqlConnection(regattaId))
{
if (conn.State == ConnectionState.Closed)
{
await conn.OpenAsync();
}
var memberModel = conn
.Query< >(cmdText, new { userId = userId }, commandType: CommandType.Text)
.FirstOrDefault();
return memberModel ?? new MemberDetail();
}
}
catch (Exception ex)
{
_logger.LogError(ex, "FindUserByAccount by Id Failed!");
throw;
}
}
흑인 얼굴 이 나 타 났 을 수도 있 습 니 다.일이 필요 하 다 면?
public async Task<bool> DeleteXXX(int regattaId, int id, int userId)
{
var result = false;
using (var conn = GetMySqlConnection(regattaId))
{
if (conn.State == ConnectionState.Closed)
{
await conn.OpenAsync();
}
using (var transaction = conn.BeginTransaction())
{
try
{
const string sqlDelClub =
@"delete from where 1=@clubId;
delete from 2 where 2=@clubId;
delete from 3 where 3=@userId and clubinfo_id=@clubId;";
await conn.QueryAsync(sqlDelClub, new
{
clubId = id,
userId = userId,
}, commandType: CommandType.Text);
transaction.Commit();
result = true;
}
catch (Exception e)
{
Console.WriteLine(e);
transaction.Rollback();
result = false;
throw;
}
}
return result;
}
}
이렇게 하면 실행 코드 블록 을 Transaction 으로 싸 서 이상 이 생기 면 catch 에서 Rollback(스크롤 백)을 하면 데이터 의 일치 성 을 확보 할 수 있 습 니 다.높 은 병발 장면 이 라면 자물쇠 가 필요 할 수도 있 고 연장 토론 은 당분간 하지 않 는 다.집합 으로 돌아 가 는 것 이 라면 처리 하기 도 쉽다.
public async Task<List< >> GetClubsByUserId(int regattaId, int userId)
{
using (var conn = GetMySqlConnection(regattaId))
{
if (conn.State == ConnectionState.Closed)
{
await conn.OpenAsync();
}
const string sql =
@"select b.club_id as id,c.name,c.image as ImageData,c.year,c.address,c.creator,c.description,b.contact ,b.phone,b.isvalid from 1 a left join 2 b on
a.clubinfo_id=b.club_id left join 3 c on
b.clubbase_id=c.club_id where a.authorize_userid=@user_Id";
List< > clubDetailList =
(await conn.QueryAsync< >(sql, new { user_Id = userId }, commandType: CommandType.Text))
.ToList();
return clubDetailList;
}
}
Dapper 에 관 한 예제 본 고 는 여기까지 입 니 다.여러분 은 홈 페이지 를 통 해 더 많은 것 을 조회 할 수 있 습 니 다.https://dapper-tutorial.net/
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Visual Studio 2017에서 SQLite를 사용한 Windows Forms 앱 개발Visual Studio 2017에서 SQLite를 사용하여 Windows Forms 앱을 개발해 보았습니다. 아직 서버 탐색기나 TableAdaptor를 사용한 GUI에서의 개발에는 대응하지 않는 것 같습니다. 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.