我正在尝试通过 nhibernate 映射数据库结构结构,但所有外键都没有操作(默认为限制)。例如:
constraint FK8BB739C23BE3416E foreign key (auction_ID) references "auctions"
HasMany 与 Inverse 也无济于事。也许我错过了映射中的一些基本内容。这是正确的sqlite结构:
CREATE TABLE auctions (
ID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
auction_name TEXT NOT NULL,
);
CREATE TABLE tasks (
ID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
task_name TEXT NOT NULL
);
CREATE TABLE task_searchstrings (
ID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
searchstring TEXT,
task_ID INTEGER UNSIGNED NOT NULL,
FOREIGN KEY (task_ID)
REFERENCES tasks(ID)
ON UPDATE CASCADE ON DELETE CASCADE
);
CREATE TABLE task_auctions (
ID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
auction_ID INTEGER UNSIGNED NOT NULL,
searchstring_ID INTEGER UNSIGNED NOT NULL,
FOREIGN KEY (auction_ID)
REFERENCES auctions(ID)
ON UPDATE CASCADE ON DELETE CASCADE,
FOREIGN KEY (searchstring_ID)
REFERENCES task_searchstrings(ID)
ON UPDATE CASCADE ON DELETE CASCADE
);
CREATE UNIQUE INDEX unique_task_auctions ON task_auctions (auction_ID, searchstring_ID);
地图类的代码:
public class auctions
{
public virtual UInt32 ID { get; set; }
public virtual string auction_name { get; set; }
public virtual IList<task_auctions> TaskAuctions { get; set; }
}
public class task_auctions
{
public virtual UInt32 ID { get; set; }
public virtual UInt32 auction_ID { get; set; }
public virtual UInt32 searchstring_ID { get; set; }
public virtual auctions Auction { get; set; }
public virtual task_searchstrings TaskSearchstring { get; set; }
}
public class task_searchstrings
{
public virtual UInt32 ID { get; set; }
public virtual string searchstring { get; set; }
public virtual UInt32 task_ID { get; set; }
public virtual tasks Task { get; set; }
public virtual IList<task_auctions> TaskAuctions { get; set; }
}
public class tasks
{
public virtual UInt32 ID { get; set; }
public virtual string task_name { get; set; }
public virtual IList<task_searchstrings> TaskSearchstrings { get; set; }
}
还有我的映射:
class auctionsMap : ClassMap<auctions>
{
public auctionsMap()
{
Id(x => x.ID).GeneratedBy.Assigned().Not.Nullable();
LazyLoad();
Map(x => x.auction_name).Not.Nullable();
HasMany(x => x.TaskAuctions).KeyColumn("auction_ID").Cascade.All();
}
}
class task_auctionsMap : ClassMap<task_auctions>
{
public task_auctionsMap()
{
Id(x => x.ID).GeneratedBy.Assigned().Not.Nullable();
Map(x => x.auction_ID).Not.Nullable().UniqueKey("unique_task_auctions");
Map(x => x.searchstring_ID).Not.Nullable().UniqueKey("unique_task_auctions");
References(x => x.Auction, "auction_ID").Not.Insert().Not.Update();
References(x => x.TaskSearchstring, "searching_ID").Not.Insert().Not.Update();
}
}
class task_searchstringsMap : ClassMap<task_searchstrings>
{
public task_searchstringsMap()
{
Id(x => x.ID).GeneratedBy.Assigned().Not.Nullable();
Map(x => x.searchstring);
Map(x => x.task_ID).Not.Nullable();
References(x => x.Task, "task_ID").Not.Insert().Not.Update();
HasMany(x => x.TaskAuctions).KeyColumn("searching_ID");
}
}
class tasksMap : ClassMap<tasks>
{
public tasksMap()
{
Id(x => x.ID).GeneratedBy.Assigned().Not.Nullable();
Map(x => x.task_name).Not.Nullable();
HasMany(x => x.TaskSearchstrings).KeyColumn("task_ID").Cascade.All();
}
}