public void UnmatchingColumns() { Table primaryTable = new Table("pktable"); primaryTable.PrimaryKey = new PrimaryKey(); SimpleValue sv = new SimpleValue(); sv.TypeName = NHibernateUtil.Int16.Name; Column pkColumn = new Column("pk_column"); pkColumn.Value = sv; primaryTable.PrimaryKey.AddColumn(pkColumn); Table fkTable = new Table("fktable"); ForeignKey fk = new ForeignKey(); sv = new SimpleValue(); sv.TypeName = NHibernateUtil.Int16.Name; Column fkColumn1 = new Column("col1"); fkColumn1.Value = sv; sv = new SimpleValue(); sv.TypeName = NHibernateUtil.Int16.Name; Column fkColumn2 = new Column("col2"); fkColumn2.Value = sv; fk.AddColumn(fkColumn1); fk.AddColumn(fkColumn2); fk.Table = fkTable; fk.ReferencedTable = primaryTable; Assert.Throws<FKUnmatchingColumnsException>(() => fk.AlignColumns()); }
public void UnmatchingColumns() { Table primaryTable = new Table(); primaryTable.Name = "pktable"; primaryTable.PrimaryKey = new PrimaryKey(); Column pkColumn = new Column( NHibernateUtil.Int16, 0 ); pkColumn.Name = "pk_column"; primaryTable.PrimaryKey.AddColumn( pkColumn ); Table fkTable = new Table(); fkTable.Name = "fktable"; ForeignKey fk = new ForeignKey(); Column fkColumn1 = new Column( NHibernateUtil.Int16, 0 ); fkColumn1.Name = "col1"; Column fkColumn2 = new Column( NHibernateUtil.Int16, 0 ); fkColumn2.Name = "col2"; fk.AddColumn( fkColumn1 ); fk.AddColumn( fkColumn2 ); fk.Table = fkTable; fk.ReferencedTable = primaryTable; }
internal ForeignKeyInfo(Table table, ForeignKey fk, Configuration config) : base("FK_", table.Name, fk.ColumnIterator, null) { //note: the fk object has a ReferencedTable property, but it doesn't always seem to be set //the reference class property is always set, so we use it instead to get the referenced table Table referencedTable = config.GetClassMapping(fk.ReferencedEntityName).Table; _referencedTable = referencedTable.Name; _referencedColumns = CollectionUtils.Map<Column, string>( referencedTable.PrimaryKey.ColumnIterator, delegate(Column column) { return column.Name; }); }
public void ToStringDoesNotThrow() { var key = new ForeignKey { Table = new Table("TestTable"), Name = "TestForeignKey" }; key.AddColumn(new Column("TestColumn")); key.AddReferencedColumns(new[] { new Column("ReferencedColumn") }); string toString = null; Assert.DoesNotThrow(() => { toString = key.ToString(); }); Assert.That(toString, Is.EqualTo("NHibernate.Mapping.ForeignKey(TestTableNHibernate.Mapping.Column(TestColumn) ref-columns:(NHibernate.Mapping.Column(ReferencedColumn)) as TestForeignKey")); }
private string GetForeignKeyName(ForeignKey fk) { // (the FKName length, of H3.2 implementation, may be too long for some RDBMS so we implement something different) int hash = fk.Name.GetHashCode() ^ Name.GetHashCode(); return string.Format("KF{0}", hash.ToString("X")); }
public ForeignKeyColumn Create(ForeignKey foreignKey) { var fk= new ForeignKeyColumn(foreignKey); fk.OwnerTable = OwnerTable; return fk; }
/// <summary> /// Create a <see cref="ForeignKey"/> for the columns in the Table. /// </summary> /// <param name="keyName"></param> /// <param name="columns">An <see cref="IList"/> of <see cref="Column"/> objects.</param> /// <param name="referencedClass"></param> /// <returns> /// A <see cref="ForeignKey"/> for the columns in the Table. /// </returns> /// <remarks> /// This does not necessarily create a <see cref="ForeignKey"/>, if /// one already exists for the columns then it will return an /// existing <see cref="ForeignKey"/>. /// </remarks> public ForeignKey CreateForeignKey( string keyName, IList columns, System.Type referencedClass ) { if( keyName == null ) { keyName = "FK" + UniqueColumnString( columns ); } ForeignKey fk = ( ForeignKey ) foreignKeys[ keyName ]; if( fk == null ) { fk = new ForeignKey(); fk.Name = keyName; fk.Table = this; fk.ReferencedClass = referencedClass; foreignKeys.Add( keyName, fk ); foreach( Column col in columns ) { fk.AddColumn( col ); } } else { // "X"= hexadecimal format if( fk.ReferencedClass != referencedClass ) { foreignKeys.Remove( keyName ); keyName += referencedClass.Name.GetHashCode().ToString( "X" ).ToUpper( System.Globalization.CultureInfo.InvariantCulture ); return CreateForeignKey( keyName, columns, referencedClass ); } } return fk; }
public ForeignKeyColumn(ForeignKey foreignKey) : base(foreignKey.Columns.First()) { ReferencedTableName = foreignKey.ReferencedTable.Name; }