方式的車輛類和VehicleProperty類...的NHibernate/FluentNHibernate屬性包
public class Vehicle
{
public virtual int Id { get; protected set; }
public virtual string Registration { get; set; }
private List<VehicleProperty> _properties = new List<VehicleProperty>();
public virtual IEnumerable<VehicleProperty> Properties
{
get { return _properties; }
protected set{ _properties = new List<VehicleProperty>(value);}
}
public virtual void AddProperty(string name, string value)
{
_properties.Add(new VehicleProperty {Name = name, Value = value});
}
}
public class VehicleProperty
{
public virtual string Name { get; set; }
public virtual string Value { get; set; }
}
我怎樣才能在兩類地圖,讓VehicleProperty表有[VehicleId]組合鍵和[名稱] 。車輛將是一個聚合根(VehicleProperty不在車輛類外訪問)。
我都試過,我能想到的一切(我是新來的NHibernate所以這不是太大)
public class VehicleMap : ClassMap<Vehicle>
{
public VehicleMap()
{
Id(x => x.Id);
Map(x => x.Registration);
HasMany(x => x.Properties)
.Inverse()
.Cascade.All();
}
}
public class VehiclePropertyMap : ClassMap<VehicleProperty>
{
public VehiclePropertyMap()
{
UseCompositeId()
.WithKeyProperty(x => x.Name)
.WithKeyReference(x => x.Vehicle, "Vehicle_Id");
Map(x => x.Name);
Map(x => x.Value);
}
}
這種映射的結果在下面的SQL和StaleStateException「意外的行數:0;預期:1" (我也真的不希望對VehicleProperty車輛屬性)...
INSERT INTO "Vehicle" (Registration) VALUES (@p0); select last_insert_rowid(); @p0 = 'AA09CDE'
UPDATE "VehicleProperty" SET Name = @p0, Value = @p1 WHERE Name = @p2 AND Vehicle_Id = @p3; @p0 = 'Colour', @p1 = 'Black', @p2 = 'Colour', @p3 = ''
我認爲一個真正的關係規範化的數據庫,而不是由ORM約束,將並應具有複合ID的,從數據庫管理員的角度來看......但我認爲NHibernate已經足夠處理複合ID了。 – 2013-08-12 22:30:31