Używamy Fluent NHibernate do modelu obiektów danych w firmie, w której pracuję. Kilka dni temu napotkaliśmy problem, że Fluent NHibernate generuje dodatkową kolumnę, która nie istnieje ani w modelu, ani w mapowaniu. Oto sytuacja:Fluent NHibernate generuje dodatkowe kolumny
My Model: FirstClass.cs
public class FirstClass
{
public virtual int Id { get; private set; }
public virtual SecondClass MyReference { get; set; }
public virtual DateTime DecisionDate { get; set; }
}
Moja Mapowanie:
public class FirstClassMap : ClassMap<FirstClass>
{
public FirstClassMap()
{
Id(x => x.Id);
Map(x => x.DecisionDate);
References(x => x.MyReference);
}
}
Po zbudowaniu schematu z następującego kodu,
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();
Dodatkowy kolumna o nazwie "SecondClass_id" jest tworzona z indeksem i kluczem obcym do tabeli SecondClass z kolumną Id. Oto tabela produkowane:
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;
Uważam, że jeśli zmienić nazwę „MyReference” na „secondClass” (nazwa taka sama jak typ klasy), nie ma dodatkowych kolumna utworzona. Ale chcę użyć mojej własności z określoną nazwą, a nie nazwą klasy. Dlaczego ta dodatkowa kolumna jest tworzona? Jak to naprawić? Nie chcę, żeby kręciły się dodatkowe kolumny kluczy obcych.
masz na myśli, że jeśli zmienisz nazwę właściwości inną niż nazwa obiektu, utworzy dwa pola jeden to twoja_nazwa_włosa druga to nazwa_obiektu? – gandil
Zdecydowanie. Jakieś pomysły, dlaczego? – SadullahCeran
Brzmi dziwnie. Co się stanie, jeśli wyraźnie podasz nazwę kolumny. References (x => x.MyReference, "SecondClass_id"); –