Utilizziamo Fluent NHibernate per il modello di oggetti dati nell'azienda in cui lavoro. Un paio di giorni fa, abbiamo riscontrato un problema che Fluent NHibernate genera una colonna aggiuntiva che non esiste né nel modello né nella mappatura. Ecco la situazione:Fluente NHibernate genera colonne aggiuntive
il mio modello: FirstClass.cs
public class FirstClass
{
public virtual int Id { get; private set; }
public virtual SecondClass MyReference { get; set; }
public virtual DateTime DecisionDate { get; set; }
}
mio Mapping:
public class FirstClassMap : ClassMap<FirstClass>
{
public FirstClassMap()
{
Id(x => x.Id);
Map(x => x.DecisionDate);
References(x => x.MyReference);
}
}
Dopo aver costruito lo schema con il seguente codice,
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 colonna denominata "SecondClass_id" viene prodotta con indice e chiave esterna nella tabella di SecondClass con colonna Id. Ecco la tabella prodotta:
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;
ho scoperto che, se io cambio titolo "MyReference" a "secondClass" (stesso nome del tipo di classe), non v'è alcuna colonna in più creato. Ma voglio usare la mia proprietà con il nome che ho specificato, non con il nome della classe. Perché viene creata questa colonna aggiuntiva? Come lo risolvo? Non voglio colonne extra di chiavi straniere in giro.
significa che se si modifica il nome della proprietà diverso dal nome dell'oggetto viene creato due campi uno è your_choosen_name altro è object_name? – gandil
Definitivamente. Tutte le idee perché? – SadullahCeran
Sembra strano. Cosa succede se si specifica esplicitamente il nome della colonna. Riferimenti (x => x.MyReference, "SecondClass_id"); –