Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co

EntityFrameworkCore.Jet is an EF Core provider for Microsoft Jet/ACE databases (Microsoft Access `.mdb`/`.accdb` files). It runs **Windows only** and bridges EF Core to the Access database engine via either ODBC or OLE DB.

Current version: `10.0.x` targeting EF Core 10 and `net10.0`.
Current version: `11.0.x` targeting EF Core 11 and `net11.0`. The test projects use **xunit v3**.

## Build

Expand All @@ -18,7 +18,7 @@ Assemblies are **strong-name signed** using `Key.snk`. `TreatWarningsAsErrors=Tr

### Local EFCore Repository (optional)

To develop against a local EF Core build instead of NuGet packages, copy `Development.props.sample` to `Development.props` and set `LocalEFCoreRepository` to your EF Core checkout. That local build must be compiled with `AssemblyVersion=10.0.0.0` to avoid binding conflicts.
To develop against a local EF Core build instead of NuGet packages, copy `Development.props.sample` to `Development.props` and set `LocalEFCoreRepository` to your EF Core checkout. That local build must be compiled with `AssemblyVersion=11.0.0.0` to avoid binding conflicts.

## Tests

Expand Down
4 changes: 4 additions & 0 deletions Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
<!-- <PackageReleaseNotes>TODO</PackageReleaseNotes> -->
<PackageTags>Entity Framework Core;Entity Framework Core;entity-framework-core;Jet;ACE;Access;MS Access;msaccess;EF;EFCore;EF Core;EntityFrameworkCore</PackageTags>
<PackageLicenseExpression>MIT</PackageLicenseExpression>
<PackageReadmeFile>README.md</PackageReadmeFile>
<PackageProjectUrl>https://github.com/CirrusRedOrg/EntityFrameworkCore.Jet</PackageProjectUrl>
<!-- <PackageIconUrl>TODO</PackageIconUrl> -->
<!-- <PackageIcon>packageIcon.png</PackageIcon> -->
Expand All @@ -32,6 +33,9 @@
</PropertyGroup>

<ItemGroup>
<!-- Shown as the package description on nuget.org. Packed for every package; non-packable
projects simply ignore it. -->
<None Include="$(MSBuildThisFileDirectory)docs\README.md" Pack="true" PackagePath="\" Visible="false" />
<EmbeddedResource Include="**\*.rd.xml" />
<!-- <None Include="$(PackageIconFullPath)" Pack="true" PackagePath="\"/> -->
</ItemGroup>
Expand Down
6 changes: 3 additions & 3 deletions Version.props
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,9 @@
Bump-up to the next iteration immediately after a release, so that subsequent daily builds are named
correctly.
-->
<VersionPrefix>10.0.1</VersionPrefix>
<PreReleaseVersionLabel>servicing</PreReleaseVersionLabel>
<PreReleaseVersionIteration>0</PreReleaseVersionIteration>
<VersionPrefix>11.0.0</VersionPrefix>
<PreReleaseVersionLabel>alpha</PreReleaseVersionLabel>
<PreReleaseVersionIteration>1</PreReleaseVersionIteration>

<!--
The following properties will automatically be set by CI builds when appropriate:
Expand Down
15 changes: 14 additions & 1 deletion docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@

| EntityFrameworkCore.Jet Version | Entity Framework Core Version | .NET | Notes |
| ------------- | ------------- | ------------- | ------------- |
| 10.0.x | 10.0.x | 10.0+ | Current development line |
| 11.0.x | 11.0.x | 11.0+ | Current development line |
| 10.0.x | 10.0.x | 10.0+ | Supported |
| 9.0.x | 9.0.x | 9.0+ | Supported |
| 8.0.x | 8.0.x | 8.0+ | Alpha 2 onwards is compatible with EF Core RTM |
| 7.0.x | 7.0.x | 6.0+ |
Expand Down Expand Up @@ -110,6 +111,18 @@ Examples are:
* `UseIdentityColumn` -> `UseJetIdentityColumn`
* `UseIdentityColumns` -> `UseJetIdentityColumns`

## LibRed - native managed engine (in development)

[LibRed](https://github.com/CirrusRedOrg/EntityFrameworkCore.Jet/blob/master/src/LibRed/README.md) is a
from-scratch, fully managed implementation of the Jet/ACE engine that lives in this repository. It reads and
writes `MDB`/`ACCDB` files **directly** - no ODBC, OLE DB, DAO or ADOX - so it removes both the Windows-only
requirement and the need to match your process architecture to an installed Access driver.

It reads and writes real database files, runs SQL end to end, and an EF Core `DbContext` round-trips through
it today. It is still in development and is **not published as a NuGet package**; the on-disk format it
depends on is documented and verified in
[`src/LibRed/docs/format/`](https://github.com/CirrusRedOrg/EntityFrameworkCore.Jet/blob/master/src/LibRed/docs/format/README.md).

## Further information

More information can be found on our [Wiki](https://www.github.com/CirrusRedOrg/EntityFrameworkCore.Jet/wiki).
Expand Down
2 changes: 1 addition & 1 deletion src/EFCore.Jet.Data/EFCore.Jet.Data.csproj
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<Description>Jet/ACE data provider for .NET used by EntityFramworkCore.Jet (Microsoft Access MDB/ACCDB files).</Description>
<Description>Jet/ACE data provider for .NET used by EntityFrameworkCore.Jet (Microsoft Access MDB/ACCDB files).</Description>
<TargetFramework>$(JetTargetFramework)</TargetFramework>
<Platforms>AnyCPU;x86;x64</Platforms>
<AssemblyName>EntityFrameworkCore.Jet.Data</AssemblyName>
Expand Down
16 changes: 14 additions & 2 deletions src/LibRed/docs/functions.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,11 @@ scope** (a column reference throws "Column not found" — a default is row-blind
**Conventions.** All functions **propagate NULL** (a NULL argument yields NULL) unless noted; string
positions are **1-based**; string comparisons default to **case-insensitive** (Access "Option Compare
Database" = Text) and take an optional compare argument. Values follow VBA sign/rounding conventions
(`CInt`/`CLng`/`CByte` use banker's rounding).
(`CInt`/`CLng`/`CByte` use banker's rounding). **Dates compare by their OLE Automation serial**, not
chronologically: below the 1899-12-30 epoch the day count goes negative while the time fraction stays
positive, so 1899-12-29 06:00 is -1.25 and 18:00 is -1.75 and ACE orders the later time first. LibRed
matches that, because `IndexKeyEncoder` writes the same serial as the index key and the two paths must
agree (see `AcePreEpochDateProbeTest`). Date *functions* are unaffected — they work in date space.

> **Two expression services — what "ACE has it" means.** Access has (1) the **Jet/ACE OLE DB Expression
> Service (JES)**, the built-in set the ACE OLE DB provider carries **standalone**, and (2) the **Access
Expand All @@ -34,7 +38,15 @@ Database" = Text) and take an optional compare argument. Values follow VBA sign/
## Scalar functions

**Type conversion** — `CBool` `CByte` `CInt` `CLng` `CSng` `CDbl` `CCur` `CDec` `CStr` `CDate` `CVar`
(`CVar` is a pass-through — LibRed has no distinct Variant type; `CCur` rounds to 4 dp).
(`CVar` is a pass-through — LibRed has no distinct Variant type; `CCur` rounds to 4 dp). A **Boolean**
converts as VARIANT_BOOL, so True is **-1**, not 1 — `CInt`/`CLng`/`CSng`/`CDbl`/`CCur` all yield -1, and
`CByte` overflows because a byte cannot hold it. `CStr` renders a Double at **15 significant digits** and a
Single at **7** (the OA/VB convention, not .NET's shortest round-trippable form), and a Boolean as `"-1"` —
note that is the Jet Expression Service's answer, where the VBA runtime proper would say `"True"`. `CBool`
accepts a numeric string (`"-1"`) and a non-integral number. `CDec` has **no ACE equivalent** — the
expression service has no such function — so it is a LibRed extension with no parity contract; `CCur` is
ACE's route to a decimal. (All verified against ACE in
`LibRed.Core.Tests.AceVbaConversionProbeTest`.)

**Math** — `Abs` `Sgn` `Int` (floor, toward −∞) `Fix` (truncate, toward zero) `Round` (banker's) `Sqr`
`Exp` `Log` (natural) `Sin` `Cos` `Tan` `Atn` `Rnd` `Timer`.
Expand Down
Loading