What's New in MM .NET 10.0.0

What’s New in .NET 10

Before diving into what’s new in MM .NET 10, we highly recommend reviewing what’s new in .NET 10 itself:

https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-10/overview

.NET 10 continues Microsoft’s focus on performance, cloud-native development, native AOT improvements, modern C# language features, and long-term platform stability. MM .NET 10 is designed to align cleanly with these advancements while maintaining compatibility with existing business layers.


Support for .NET 10, .NET Standard 2.1, and Entity Framework 6

MM .NET 10 supports .NET 10.0 as its primary runtime, while continuing to support .NET Standard 2.1 for maximum portability across platforms.

.NET Standard 2.1 is Microsoft’s specification of .NET APIs that are available across all modern .NET implementations, including:

  • .NET (Windows, Linux, macOS)
  • .NET Framework
  • .NET MAUI (iOS, macOS, Android, Windows)

MM .NET 10 also supports Entity Framework 6.4 for .NET Standard, allowing existing EF-based business layers to continue working without forcing an immediate migration to EF Core.

Microsoft’s port of Entity Framework 6.4 to .NET Standard makes it possible to:

  • Reuse mature EF 6 business layers
  • Share business logic across desktop, web, and mobile applications
  • Modernize projects incrementally instead of rewriting everything at once

NOTE:
See the instructions in the Help Topic Moving Projects to MM .NET 10 (VFPS://Topic/_2X10GG1JW) for step-by-step guidance.

MM .NET Base Assemblies Targeting .NET Standard 2.1

The following MM .NET base assemblies conform to .NET Standard 2.1:

  • MM .NET Framework Interfaces Standard
  • MM .NET Framework Standard
  • MM .NET Framework EF Standard

Multi-Targeting for Maximum Compatibility

Some older technologies—such as Windows Forms—do not work well when consuming .NET Standard-only libraries. For this reason, MM .NET Standard assemblies are multi-targeted for both .NET 10 and .NET Standard 2.1.


MM .NET Assemblies No Longer Installed in the GAC

In MM .NET 10, we moved all MM .NET assemblies out of the Global Assembly Cache (GAC) and into a versioned, side-by-side install location under C:\Program Files\OakLeaf\MM.NET\2026\10.0.0\Assemblies. This change aligns MM .NET with modern .NET practices introduced after .NET Framework, where the GAC is no longer used or supported by SDK-style projects targeting .NET 5 and later (including .NET 10). Installing assemblies in a private, versioned folder improves reliability, avoids assembly version conflicts, enables multiple MM .NET versions to coexist on the same machine, and provides clearer transparency into exactly which assemblies a project is using. This approach also better supports cross-platform development, modern Visual Studio tooling, and NuGet-based workflows, all of which are central to MM .NET going forward.


Hot Tip – Multi-Targeting Your .NET Projects

Visual Studio provides a powerful (but somewhat hidden) way to multi-target projects. This allows you to support both .NET 10 and .NET Standard 2.1 from a single codebase.

Steps

  1. Create a project using the Class Library (.NET Standard) template.

  2. In Solution Explorer, right-click the project and select
    Edit (project name).csproj or .vbproj.

  3. Change TargetFramework to TargetFrameworks, and add net10.0:

<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup> <TargetFrameworks>netstandard2.1;net10.0</TargetFrameworks> </PropertyGroup>

</Project>

  1. Save the file and reload the project when prompted.

  2. Rebuild the project.

  3. Under Dependencies, you will now see both:

    • net10.0
    • .NETStandard 2.1

    Your output folders will contain builds for each target.


Getting Ready for Entity Framework Core and .NET 10+

While MM .NET 10 continues to support Entity Framework 6.4, it is designed to position you for a smooth future transition to Entity Framework Core.

This approach allows you to:

  • Continue using EF 6 today
  • Move business layers to .NET Standard immediately
  • Adopt EF Core on your own schedule, without disruption

MM .NET shields your application code from EF-specific details, significantly reducing the cost and risk of future framework changes.


Support for POCO Business Objects and Code First

This capability was introduced in earlier versions of MM .NET, but is included here for those upgrading from older releases.

MM .NET fully supports POCO (Plain Old CLR Object) business objects and Code First workflows.

Key Capabilities

  • Business entities no longer need to derive from mmEntityObject or EF’s EntityObject
  • You can use simple POCO classes derived from System.Object
  • Existing applications require little or no code changes
  • Business objects can be generated:
    • From an existing database
    • From Code First entity classes
    • From EDMX models (optional)

Code First Support

MM .NET integrates directly with standard Entity Framework Code First features:

  • Data annotations
  • Fluent API mappings
  • Database generation from code
  • Database updates from model changes

The Business Layer Generator can:

  • Generate Code First entities from an existing database
  • Generate Fluent API and annotation mappings automatically
  • Serve as a starting point for fully manual Code First workflows

To align with Microsoft’s modern guidance, MM .NET business objects primarily use DbContext. Internally, MM .NET still leverages ObjectContext where lower-level control is required.


Support for Dependency Injection

MM .NET business objects support dependency injection (DI), allowing dependent objects to be supplied externally rather than created internally.

Benefits of DI

  • Clear visibility into object dependencies
  • Improved testability
  • Easier substitution of mock or alternative implementations

When you enable Dependency Injection in the Business Layer Generator, constructors are generated that accept required dependencies:

public Customer(ImmDataAccessBase dao, ImmDatabaseManager databaseMgr)
{
    this.SetDataAccessObject(dao);
    this.DatabaseMgr = databaseMgr;
}

When dependencies are injected, MM .NET factory methods are bypassed, giving you full control over object lifetimes.


Asynchronous Business Object Methods

MM .NET business objects support asynchronous operations for retrieving entity lists and performing long-running data access tasks.

Asynchronous programming is critical for:

  • Responsive UI applications
  • Scalable web services
  • Cloud and mobile workloads

The mmBusinessObjectGeneric class includes several async helper methods.

For more information on async programming in .NET, see:

https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/async/


© (c) 2026 Oak Leaf Enterprises, Inc., 1996-2026 • Updated: 02/10/26
Comment or report problem with topic