Ich bin neu in NHibernate und habe Schwierigkeiten mit einem einfachen aber stumpfen Fehler.Fluent NHibernate Composite-Schlüssel mit Daten
Ich habe eine Tabelle in meinem DB (MSSQL2008), wo der zusammengesetzte Schlüssel aus 2 Datumsspalten besteht.
Dies würde eine Zeitspanne StartDate und EndDate darstellen, die für die Zwecke meiner Lösung eindeutig ist.
Die Tabellendefinition ist als solche.
CREATE TABLE [dbo] [CompositeKeyTab] ( [KeyCol1] [Datum] NOT NULL, [KeyCol2] [Datum] NOT NULL, [Wert] [ decimal] (18, 0), NULL, CONSTRAINT [PK_CompositeKeyTab] PRIMARY KEY CLUSTERED ( [KeyCol1] ASC, [KeyCol2] ASC ) mit (PAD_INDEX = AUS, STATISTICS_NORECOMPUTE = AUS, IGNORE_DUP_KEY = AUS, ALLOW_ROW_LOCKS = EIN, ALLOW_PAGE_LOCKS = ON) EIN [PRIMÄR] ) EIN [PRIMÄR]
In meinem Domain-Modell habe ich eine entsprechende Einheit:
public class CompositeKeyEnt
{
public virtual DateTime KeyCol1 { get; set; }
public virtual DateTime KeyCol2 { get; set; }
public virtual decimal Val { get; set; }
public override bool Equals(object obj)
{
var compareTo = obj as FinancialDay;
if (compareTo == null)
return false;
return this.GetHashCode() == compareTo.GetHashCode();
}
public override int GetHashCode()
{
return this.KeyCol1.GetHashCode()^this.KeyCol2.GetHashCode();
}
}
und in meinem Kartierungsaufbau einer Karte:
public class CompositeKeyEntMap: ClassMap<CompositeKeyEnt>
{
public CompositeKeyEntMap()
{
WithTable("CompositeKeyTab");
UseCompositeId().WithKeyProperty(e => e.KeyCol1, "KeyCol1").WithKeyProperty(e => e.KeyCol2, "KeyCol2");
Map(e => e.Val, "Value");
}
}
Alles OK kompiliert. Aber wenn ich versuche, eine Instanz meiner Klasse der DB bestehen bleiben (wie so)
CompositeKeyEnt cke = new CompositeKeyEnt() { KeyCol1 = DateTime.Now.AddDays(1), KeyCol2=DateTime.Now.AddDays(1), Val = 2.2M };
CompositeKeyEnt cke1 = new CompositeKeyEnt() { KeyCol1 = DateTime.Now, KeyCol2 = DateTime.Now, Val = 1.1M };
Repository<CompositeKeyEnt> crep = new Repository<CompositeKeyEnt>();
crep.SaveOrUpdate(cke);
crep.SaveOrUpdate(cke1);
ich:
"Unexpected Zeilenanzahl: 0; erwartet: 1"
Wenn Flush () wird auf der Sitzung aufgerufen.
public virtual T SaveOrUpdate(T entity)
{
using (var context = Session)
{
context.SaveOrUpdate(entity);
context.Flush(); //Exception raised here!!!
}
return entity;
}
Was mache ich falsch?
Ich habe das gleiche Problem !!! –