EFCore.FSharp 발표
오늘은 Entity Framework Core에 대한 F# 지원의 첫 번째 알파 릴리스로, EF Core 5.0.3을 지원하는 F# 프로젝트에서 EF Core를 직접 사용할 수 있습니다.
여기에는 마이그레이션 및 리버스 엔지니어링에 대한 지원이 포함되어 테이블을 F# 레코드에 매핑하고
option
와 같은 F# 관용구를 활용하여 null 허용 열을 나타낼 수 있습니다. 그러나 현재로서는 기본 또는 외래 키에 대해서는 작동하지 않으며 일반 열( GitHub issue )에만 작동합니다.테스트 드라이브로 가져가려면 https://www.nuget.org/packages/EntityFrameworkCore.FSharp에서 NuGet 패키지를 가져옵니다.
알파 릴리스이므로 GitHub repo에 문제를 기록하십시오.
현재 비교적 간단한 스키마를 지원하며 테이블당 다유형 관계는 아직 지원하지 않지만 on the to-do list 입니다.
열
option
을 지원하지만 식별된 통합과 같은 유형은 아직 지원하지 않습니다.설치
NuGet 패키지를 가져오는 모든 일반적인 방법...
Install-Package EntityFramworkCore.FSharp
dotnet add package EntityFramworkCore.FSharp
paket install EntityFramworkCore.FSharp
용법
설치되면
dotnet ef
에 등록해야 수령할 수 있습니다. 프로젝트에 다음 코드를 추가하기만 하면 됩니다. 컴파일 시간에 감지되며 Startup
클래스에서 호출할 필요가 없습니다.module DesignTimeServices
open Microsoft.Extensions.DependencyInjection
open Microsoft.EntityFrameworkCore.Design
open EntityFrameworkCore.FSharp
type DesignTimeServices() =
interface IDesignTimeServices with
member __.ConfigureDesignTimeServices(serviceCollection: IServiceCollection) =
let fSharpServices = EFCoreFSharpServices.Default
fSharpServices.ConfigureDesignTimeServices serviceCollection
()
마이그레이션
코드 우선 데이터베이스가 지원되며 사용자 인증을 사용하여 F#에서 기본 MVC 응용 프로그램을 만드는 작업 예제는 https://github.com/simon-reynolds/EFCore.FSharp.MvcAuth에서 사용할 수 있습니다.
한 가지 기억해야 할 점은 레코드 유형이 Entity Framework에서 올바르게 생성될 수 있도록 지정된
[<CliMutable>]
특성을 가져야 한다는 것입니다.실행 후
dotnet ef migration add
생성된 파일을 프로젝트에 추가해야 합니다. 마이그레이션 파일은 순차적으로 생성되므로 fsproj 파일에 단일 glob 참조를 추가하여 한 번에 모두 추가할 수 있습니다.<Compile Include="Migrations/*.fs" />
자동화된 솔루션을 찾기 위해 이를 추적하는 issue이 있습니다. 언제나처럼 어떤 도움이나 제안도 환영합니다.
발판
기존 데이터베이스에서 모델을 스캐폴딩할 때 위의
DesignTimeServices
유형에서 생성된 코드를 생성하는 방법을 지정할 수 있습니다.레코드 유형 또는 C#에서 작동하는 방식과 유사한 클래스로 유형을 생성할 수 있습니다.
예를 들어 ID, 제목 및 콘텐츠가 있는 블로그 게시물 유형이 주어지면 아래 예 중 하나로 생성될 수 있습니다.
// Record type
type BlogPost = {
Id : int
Title: string
Content: string
}
// Class type
type BlogPost() =
[<DefaultValue>] val mutable private _Id : int
member this.Id with get() = this._Id and set v = this._Id <- v
[<DefaultValue>] val mutable private _Title : string
member this.Title with get() = this._Title and set v = this._Title <- v
[<DefaultValue>] val mutable private _Content : string
member this.Content with get() = this._Content and set v = this._Content <- v
마찬가지로 선택적 열은
Nullable<'a>
또는 'a option
로 렌더링될 수 있습니다. 기본 구성은 option
유형으로 지정된 null 허용 열이 있는 레코드 유형을 생성합니다.이는 스캐폴드 옵션을 정의하고
DesignTimeServices
에 전달함으로써 이루어집니다.module DesignTimeServices =
open Microsoft.Extensions.DependencyInjection
open Microsoft.EntityFrameworkCore.Design
open EntityFrameworkCore.FSharp
type DesignTimeServices() =
interface IDesignTimeServices with
member __.ConfigureDesignTimeServices(serviceCollection: IServiceCollection) =
// The default behaviour can be specified by calling
let fSharpServices = EFCoreFSharpServices.Default
// Or we can define a ScaffoldOptions use that instead
let scaffoldOptions =
ScaffoldOptions (
ScaffoldTypesAs = ScaffoldTypesAs.ClassType,
ScaffoldNullableColumnsAs = ScaffoldNullableColumnsAs.NullableTypes)
let fSharpServices = EFCoreFSharpServices.WithScaffoldOptions scaffoldOptions
fSharpServices.ConfigureDesignTimeServices serviceCollection
()
자세한 내용은 프로젝트 문서here에서 확인할 수 있습니다.
옵션 유형
null 허용 열을 옵션에 매핑하기 위한
option
를 포함하여 OptionConverter
유형에 대한 기본 지원이 있습니다. 코드 우선 데이터베이스를 구축할 때 OnModelCreating
끝에 다음을 포함하기만 하면 됩니다.type MyContext (options) =
inherit DbContext (options)
override this.OnModelCreating mb =
(* Define entities here *)
modelBuilder.RegisterOptionTypes()
다른 문제
나는 확신합니다. 발견한 모든 문제를 보고하고 Entity Framework Core에 대한 F# 지원을 개선할 수 있도록 도와주세요!
Reference
이 문제에 관하여(EFCore.FSharp 발표), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/simonreynolds/announcing-efcore-fsharp-c6d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)