NHibernate - Map Umbraco member profile properties with Custom Interceptor
I'm writing an application that uses NHibernate as the data layer, but is required to integrate with an existing Umbraco system. Specifically, I have a User class that needs to map to an Umbraco member.
Using NHibernate to get the member id and email was simple enough, I just mapped my User class to the Umbraco cmsMember table like so:
public class UserMap : ClassMap<User>
{
public UserMap()
{
Table("cmsMember");
Id(x => x.Id).Column("nodeId");
Map(x => x.Email).Column("Email");
}
}
The bit I got stuck on was how to get Umbraco member profile properties into my User class.
Well as it turns out it's actually quite simple with the use of an NHibernate Custom Interceptor. I just created a class that inherits from the EmptyInterceptor class and overrides the OnLoad method:
public class CustomInterceptor : EmptyInterceptor
{
public override bool OnLoad(object entity, object id, object[] state, string[] propertyNames, global::NHibernate.Type.IType[] types)
{
if (entity is User)
{
var user = (User)entity;
// load profile properties from umbraco
var member = new Member(user.Id);
user.FirstName = member.getProperty("firstName").Value.ToString();
user.LastName = member.getProperty("lastName").Value.ToString();
}
return base.OnLoad(entity, id, state, propertyNames, types);
}
}
The last thing to do is pass an instance of the CustomInterceptor class to the OpenSession method of the NHibernate ISessionFactory instance:
var session = _sessionFactory.OpenSession( new CustomInterceptor() );
Need Some C# Help?
Search fiverr for freelance C# developers.
Follow me for updates
When I'm not coding...
Me and Tina are on a motorcycle adventure around Australia.
Come along for the ride!
More C# Posts
- .NET 7.0 + MySQL - Connect to MySQL Database with Dapper in C# and ASP.NET Core
- MySQL + Dapper - Create database if it doesn't exist on startup with C# and ASP.NET Core
- .NET 7.0 + Dapper + MySQL - CRUD API Tutorial in ASP.NET Core
- Postgres CRUD Operations in C# with Dapper Repository
- .NET 7.0 + C# - JWT Authentication Tutorial without ASP.NET Core Identity
- .NET 7.0 + Postgres - Connect to PostgreSQL Database with Dapper in C# and ASP.NET Core
- Postgres + Dapper - Create database if it doesn't exist on startup with C# and ASP.NET Core
- .NET 7.0 + Dapper + PostgreSQL - CRUD API Tutorial in ASP.NET Core
- SqlClient.SqlException - The certificate chain was issued by an authority that is not trusted
- .NET 7.0 + Dapper - Connect to MS SQL Server Database in ASP.NET Core
- .NET 7.0 + Dapper + MS SQL Server - CRUD API Tutorial in ASP.NET Core
- Dapper + SQL Server - Create database if it doesn't exist on startup in ASP.NET Core
- .NET 7.0 + Dapper - Connect to SQLite Database in ASP.NET Core
- .NET 7.0 + Dapper + SQLite - CRUD API Tutorial in ASP.NET Core
- C# + .NET 7.0 - Serialize (Convert) Enum to String in API Response
- .NET 7.0 + Dapper - Create Database Tables on Startup in ASP.NET Core
- C# + RestSharp - Add Bearer Token Authorization Header to HTTP Request in .NET
- C# + RestSharp - HTTP PUT Request Examples in .NET
- C# + RestSharp - HTTP DELETE Request Examples in .NET
- C# + RestSharp - HTTP GET Request Examples in .NET
- C# + RestSharp - POST a JSON Object to an API in .NET
- C# + RestSharp - HTTP POST Request Examples in .NET
- .NET 7.0 + RestSharp - Deserialize Dynamic JSON Response from HTTP Request
- .NET 7.0 - Create a Base Controller in .NET
- .NET 7.0 Auth - Sign & Validate JWT Without Core Identity
- .NET 7.0 - Create Custom AuthorizeAttribute and AllowAnonymous Attribute
- .NET 7.0 - Facebook Authentication API Tutorial with Example
- .NET 6.0 - Apply Authorize Attribute to All Controllers
- .NET 6.0 - Connect to InMemory Database with Entity Framework Core
- .NET 6.0 - Connect to SQLite Database with Entity Framework Core
- .NET 6.0 - Connect to PostgreSQL Database with Entity Framework Core
- .NET 6.0 - Connect to MySQL Database with Entity Framework Core
- .NET 6.0 - Connect to SQL Server with Entity Framework Core
- .NET 6.0 - CRUD API Example and Tutorial
- .NET 6.0 - Send an Email via SMTP with MailKit
- .NET 6.0 - Boilerplate API Tutorial with Email Sign Up, Verification, Authentication & Forgot Password
- .NET 6.0 - Role Based Authorization Tutorial with Example API
- .NET 6.0 - Minimal API Tutorial and Example
- .NET 6.0 - Execute EF Database Migrations from Code on Startup
- .NET 6.0 - Database Migrations to Different DB Per Environment (SQLite in Dev, SQL Server in Prod)
- .NET 6.0 - JWT Authentication with Refresh Tokens Tutorial with Example API
- .NET 6.0 - Create and Validate JWT Tokens + Use Custom JWT Middleware
- .NET 6.0 - Global Error Handler Tutorial with Example
- .NET 6.0 - Hash and Verify Passwords with BCrypt
- .NET 6.0 - User Registration and Login Tutorial with Example API
- .NET 6.0 - Basic Authentication Tutorial with Example API
- .NET 6.0 - JWT Authentication Tutorial with Example API
- .NET 5.0 - Connect to MySQL Database with Entity Framework Core
- .NET 5.0 - Connect to SQL Server with Entity Framework Core
- .NET - Return Enum as String from API
- .NET - Startup Class in a Nutshell
- .NET - Program Class and Main Method in a Nutshell
- .NET + MSBuild - C# Project File (.csproj) in a Nutshell
- .NET 5.0 - CRUD API Example and Tutorial
- .NET 5.0 - Send an Email via SMTP with MailKit
- .NET 5.0 - Boilerplate API with Email Sign Up, Verification, Authentication & Forgot Password
- .NET 5.0 - Role Based Authorization Tutorial with Example API
- .NET 5.0 - Bare Bones API Tutorial
- VS Code + .NET - Debug a .NET Web App in Visual Studio Code
- .NET 5.0 API - JWT Authentication with Refresh Tokens
- .NET 5.0 - Automatic Entity Framework Migrations to SQL Database on Startup
- .NET 5.0 - Entity Framework Migrations for Multiple Databases (SQLite and SQL Server)
- .NET 5.0 - Create and Validate JWT Tokens + Use Custom JWT Middleware
- .NET 5.0 - Global Error Handler Tutorial
- .NET 5.0 - Hash and Verify Passwords with BCrypt
- .NET 5.0 API - Allow CORS requests from any origin and with credentials
- .NET 5.0 - Simple API for Authentication, Registration and User Management
- .NET 5.0 - Basic Authentication Tutorial with Example API
- .NET 5.0 - JWT Authentication Tutorial with Example API
- .NET Core C# + AWS SES - Send Email via SMTP with AWS Simple Email Service
- Blazor WebAssembly - Fake Backend Example for Backendless Development
- Blazor WebAssembly - User Registration and Login Example & Tutorial
- ASP.NET Core 3.1 - Global Error Handler Tutorial
- Blazor WebAssembly - Authentication Without Identity
- Blazor WebAssembly - HTTP GET Request Examples
- Blazor WebAssembly - HTTP POST Request Examples
- Blazor WebAssembly - Display a list of items
- C# - Encode and Decode Base64 Strings
- Blazor WebAssembly - Basic HTTP Authentication Tutorial & Example
- Blazor WebAssembly - JWT Authentication Example & Tutorial
- Blazor WebAssembly - Get Query String Parameters with Navigation Manager
- Blazor WebAssembly - Form Validation Example
- ASP.NET Core Blazor WebAssembly - Communication Between Components
- ASP.NET Core 3.1 - Create and Validate JWT Tokens + Use Custom JWT Middleware
- ASP.NET Core 3.1 - Hash and Verify Passwords with BCrypt
- ASP.NET Core 3.1 - Send Emails via SMTP with MailKit
- ASP.NET Core 3.1 - Boilerplate API with Email Sign Up, Verification, Authentication & Forgot Password
- ASP.NET Core - Setup Development Environment
- ASP.NET Core 3.1 API - JWT Authentication with Refresh Tokens
- ASP.NET Core API - Allow CORS requests from any origin and with credentials
- ASP.NET Core - EF Core Migrations for Multiple Databases (SQLite and SQL Server)
- ASP.NET Core - Automatic EF Core Migrations to SQL Database on Startup
- ASP.NET Core 3.1 - Basic Authentication Tutorial with Example API
- ASP.NET Core 3.1 - Role Based Authorization Tutorial with Example API
- ASP.NET Core 3.1 - Simple API for Authentication, Registration and User Management
- ASP.NET Core 3.1 - JWT Authentication Tutorial with Example API
- ASP.NET Core 2.2 - Role Based Authorization Tutorial with Example API
- C# - Pure Pagination Logic in C# / ASP.NET
- ASP.NET Core Razor Pages - Pagination Example
- ASP.NET Core 2.2 - Basic Authentication Tutorial with Example API
- ASP.NET Core 2.2 - JWT Authentication Tutorial with Example API
- ASP.NET Core 2.2 - Simple API for Authentication, Registration and User Management
- C# / ASP.NET - Domain Validation Logic in Domain Driven Design (DDD)
- ASP.NET MVC - Pagination Example with Logic like Google
- Fluent NHibernate - Unproxy Entity Objects with AutoMapper
- C# - Incremental Delay to Prevent Brute Force or Dictionary Attack
- Dynamic LINQ - Using strings to sort by properties and child object properties
- Web API 2 + ELMAH - Log ALL Unhandled Exceptions
- Moq - Get Setup() to return a dynamic collection from a fake repository
- Post a simple string value from AngularJS to .NET Web API
- ASP.NET Web API 2 - Enum Authorize Attribute
- ASP.NET MVC - Required Checkbox with Data Annotations
- C# - Get time zone and UTC offset from latitude and longitude (GPS coordinates)
- Using MVC 4 Web Api with jQuery DataTables
- MVC CheckboxList for property of type IList<Enum>
- MVC3 redirect to mobile site and stop executing
- ASP.NET MVC3 + Altairis Web Security Toolkit
- Populate ASP.NET dropdown list with month names using LINQ