Estamos utilizando Fluiber NHibernate para el modelo de objetos de datos en la empresa en la que trabajo. Hace un par de días, nos encontramos con un problema que Fluent NHibernate genera una columna adicional que no existe ni en el modelo ni en el mapeo. Aquí está la situación:Fluido NHibernate genera columnas adicionales
Mi Modelo: FirstClass.cs
public class FirstClass
{
public virtual int Id { get; private set; }
public virtual SecondClass MyReference { get; set; }
public virtual DateTime DecisionDate { get; set; }
}
Mi Mapping:
public class FirstClassMap : ClassMap<FirstClass>
{
public FirstClassMap()
{
Id(x => x.Id);
Map(x => x.DecisionDate);
References(x => x.MyReference);
}
}
Después de construir el esquema con el siguiente código,
Instance._sessionFactory = Fluently.Configure()
.Database(MySQLConfiguration.Standard
.ConnectionString(connectionString)
.ShowSql())
.ExposeConfiguration(c =>
{
c.Properties.Add("current_session_context_class", ConfigurationHelper.getSetting("SessionContext"));
})
.ExposeConfiguration(BuildSchema)
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<Community>())
.BuildSessionFactory();
Un extra la columna llamada "SecondClass_id" se produce con índice y clave externa a la tabla SecondClass con la columna Id. Aquí está la tabla producido:
CREATE TABLE `FirstClass` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`DecisionDate` datetime DEFAULT NULL,
`MyReference_id` int(11) DEFAULT NULL,
`SecondClass_id` int(11) DEFAULT NULL,
PRIMARY KEY (`Id`),
KEY `MyReference_id` (`MyReference_id`),
KEY `SecondClass_id` (`SecondClass_id`),
CONSTRAINT `FK4AFFB59B2540756F` FOREIGN KEY (`MyReference_id`) REFERENCES `SecondClass` (`Id`),
CONSTRAINT `FK4AFFB59B51EFB484` FOREIGN KEY (`SecondClass_id`) REFERENCES `SecondClass` (`Id`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
me encontré con que, si cambio el nombre de "MiReferencia" a "de segunda clase" (el mismo nombre que el tipo de clase), no hay una columna adicional creado. Pero quiero usar mi propiedad con el nombre que especifiqué, no con el nombre de la clase. ¿Por qué se crea esa columna adicional? ¿Cómo arreglo eso? No quiero que haya columnas adicionales de llaves foráneas.
quieres decir si cambias el nombre de propiedad diferente del nombre del objeto, crea dos campos uno es tu_nombre_de_choque ¿otro es el nombre_objeto? – gandil
Definitivamente. ¿Alguna idea de por qué? – SadullahCeran
Suena extraño. ¿Qué sucede si especifica el nombre de la columna explícitamente? Referencias (x => x.MyReference, "SecondClass_id"); –