Castle.MonoRail.ActiveRecordSupport.ARDataBinder.ObtainPrimaryKeyValue C# (CSharp) Method

ObtainPrimaryKeyValue() private method

private ObtainPrimaryKeyValue ( ActiveRecordModel model, Castle.Components.Binder.CompositeNode node, String prefix, PrimaryKeyModel &pkModel ) : object
model Castle.ActiveRecord.Framework.Internal.ActiveRecordModel
node Castle.Components.Binder.CompositeNode
prefix String
pkModel Castle.ActiveRecord.Framework.Internal.PrimaryKeyModel
return object
		private object ObtainPrimaryKeyValue(ActiveRecordModel model, CompositeNode node, String prefix,
											 out PrimaryKeyModel pkModel)
		{
			pkModel = ObtainPrimaryKey(model);

			String pkPropName = pkModel.Property.Name;

			Node idNode = node.GetChildNode(pkPropName);

			if (idNode != null && idNode.NodeType != NodeType.Leaf)
			{
				throw new BindingException("Expecting leaf node to contain id for ActiveRecord class. " +
										   "Prefix: {0} PK Property Name: {1}", prefix, pkPropName);
			}

			LeafNode lNode = (LeafNode) idNode;

			if (lNode == null)
			{
				throw new BindingException("ARDataBinder autoload failed as element {0} " +
										   "doesn't have a primary key {1} value", prefix, pkPropName);
			}

			bool conversionSuc;

			return Converter.Convert(pkModel.Property.PropertyType, lNode.ValueType, lNode.Value, out conversionSuc);
		}