We will continue the work that we have done on the previous post. We will modify our main entity to have its related one-to-one type as a property. Then we will modify our stored procedure to populate these two objects together.
Firstly, we prepare a new class for the related one-to-one type that will be linked from our main entity:
public class UserRole { public long RoleId { get; set; } public string Name { get; set; } public string Description { get; set; } public bool Active { get; set; } }
Then we modify our main entity (i.e. User class) to contain the new type as a property:
public class User { public long UserId { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public DateTime? DOB { get; set; } public UserRole Role { get; set; } }
We also need to change the stored procedure to return the new type as well in addition of the main type:
CREATE PROCEDURE [sec].[spGetRelatedUsers] @UserName nvarchar(256), @NumberOfRecords int AS BEGIN -- some processing before the final select -- this can include complex processing using temporary table(s), CTE(s), etc... SELECT DISTINCT TOP (@NumberOfRecords) U.* , R.* FROM Users U INNER JOIN Roles R ON U.RoleId=R.RoleId -- other joins and conditions END
Finally we change the main entity mapping file to include the new type by using Component:
<?xml version="1.0" encoding="utf-8" ?> <hibernate-mapping assembly="MyAssemblyName" namespace="MyNamespace" xmlns="urn:nhibernate-mapping-2.2"> <class name="User" lazy="false"> <id name="UserId"> <generator class="identity" /> </id> <property name="FirstName" /> <property name="LastName" /> <property name="DOB" column="DateOfBirth" /> <component name="Role" class="UserRole"> <property name="RoleId"> <column name="RoleId" /> </property> <property name="Name" /> <property name="Description" /> <property name="Active" /> </component> </class> </hibernate-mapping>
On the next post we will see how to use stored procedure to populate two entities' objects (an entity with its related one-to-many entity).
No comments:
Post a Comment