fixture.cs

来自「NHibernate NET开发者所需的」· CS 代码 · 共 207 行

CS
207
字号
using System;
using System.Data;
using Iesi.Collections.Generic;
using NHibernate;
using NHibernate.SqlTypes;
using NHibernate.UserTypes;
using NUnit.Framework;

namespace NHibernate.Test.NHSpecificTest.NH732
{
	[TestFixture]
	public class Fixture : BugTestCase
	{
		[Test]
		public void CaseInsensitiveId()
		{
			using (ISession session = OpenSession())
			{
				User user = new User();
				user.UserName = @"Domain\User";
				session.Save(user);
				Role role = new Role();
				role.RoleName = "ADMINS";
				session.Save(role);
				session.Flush();
			}
			using (ISession session = OpenSession())
			{
				User user = (User) session.Load(typeof(User), "DOMAIN\\USER");
				Role role = (Role) session.Load(typeof(Role), "Admins");
				UserToRole userToRole = new UserToRole();
				userToRole.User = user;
				userToRole.Role = role;
				session.Save(userToRole);
				session.Flush();
			}

			using (ISession session = OpenSession())
			{
				User user = session.Get<User>("domain\\user");
				Assert.AreEqual(1, user.UserToRoles.Count);
			}
			
			using (ISession session = OpenSession())
			{
				session.Delete("from System.Object o");
				session.Flush();
			}
		}
	}

	public class CaseInsensitiveStringType : IEnhancedUserType
	{
		public SqlType[] SqlTypes
		{
			get { return new SqlType[] { new StringSqlType() }; }
		}

		public System.Type ReturnedType
		{
			get { return typeof (string); }
		}

		
		public new bool Equals(object x, object y)
		{
			return StringComparer.InvariantCultureIgnoreCase.Equals((string)x, (string)y);
		}

		public int GetHashCode(object x)
		{
			return StringComparer.InvariantCultureIgnoreCase.GetHashCode((string)x);
		}

		public object NullSafeGet(IDataReader rs, string[] names, object owner)
		{
			int ordinal = rs.GetOrdinal(names[0]);
			string s = rs.GetString(ordinal);
			return s;
			/* Using this will work, because we normalize the returned value
			 * if(s==null)
				return null;
			return s.ToLower();
			 */
		}

		public void NullSafeSet(IDbCommand cmd, object value, int index)
		{
			IDbDataParameter parameter = (IDbDataParameter)cmd.Parameters[index];
			parameter.Value =
				value == null ? DBNull.Value : value;
		}

		public object DeepCopy(object value)
		{
			return value.ToString();
		}

		public bool IsMutable
		{
			get { return true; }
		}

		public object FromXMLString(string xml)
		{
			return xml;
		}

		public string ObjectToSQLString(object value)
		{
			return "'" + value.ToString() + "'";
		}

		public string ToXMLString(object value)
		{
			return value.ToString();
		}

		public object Replace(object original, object target, object owner)
		{
			return original;
		}

		public object Assemble(object cached, object owner)
		{
			return cached;
		}

		public object Disassemble(object value)
		{
			return value;
		}
	}
	
	public class User
	{
		string userName;

		ISet<UserToRole> userToRoles;

		public virtual ISet<UserToRole> UserToRoles
		{
			get { return userToRoles; }
			set { userToRoles = value; }
		}

		public virtual string UserName
		{
			get { return userName; }
			set { userName = value; }
		}
	}

	public class UserToRole
	{
		int id;

		User user;

		Role role;

		int type;

		public virtual int Id
		{
			get { return id; }
			set { id = value; }
		}

		public virtual User User
		{
			get { return user; }
			set { user = value; }
		}

		public virtual Role Role
		{
			get { return role; }
			set { role = value; }
		}

		public virtual int Type
		{
			get { return type; }
			set { type = value; }
		}
	}

	public class Role
	{
		string roleName;
		ISet<UserToRole> roleToUsers;

		public virtual string RoleName
		{
			get { return roleName; }
			set { roleName = value; }
		}

		public virtual ISet<UserToRole> RoleToUsers
		{
			get { return roleToUsers; }
			set { roleToUsers = value; }
		}
	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?