【发布时间】:2018-01-18 16:52:05
【问题描述】:
我在使用 Fluent Nhibernate 映射这些关系时遇到问题:
请求实体:
- 身份证
- 日期
学校实体:
- 复合 id 由
- 姓名
- 请求
- 财产
位置实体:
- 复合 id 由
- 存在(布尔值)
- 学校(-> school_name 和 request_id 的外键)
- 省
基本上,这些关系代表了我向某所学校询问某个 Web api 服务的情况。我想保存请求(我在这里只放了日期,但我还有很多字段)以及为学校检索的信息。我还想将此信息与生成信息的请求绑定。 我也想像以前一样保存学校位置和绑定这个信息。
到目前为止我做了什么:
School.cs:
public class School
{
public virtual string name {get; set;}
public virtual Request request {get; set;}
public virtual string property;
}
Request.cs:
public class Request
{
public virtual int id {get; set;}
public virtual DateTime date {get; set;}
}
Location.cs:
public class Location
{
public virtual bool exist {get; set;}
public virtual School school {get; set;}
public virtual string province {get; set;}
}
SchoolMap.cs
public class SchoolMap : ClassMap<School>
{
public SchoolMap() {
CompositeId().KeyProperty(x => x.name, "name")
.KeyProperty(x => x.request, "request_id");
Map(x => x.property);
}
}
RequestMap.cs
public class Request : ClassMap<Request>
{
public SchoolMap() {
Id(x => x.id).GeneratedBy.Identity();
Map(x => x.date);
}
}
LocationMap.cs
public class LocationMap : ClassMap<Location>
{
public LocationMap() {
CompositeId().KeyProperty(x => x.exist)
.KeyReference(x => x.school, new string[] {"name", "request_id"});
References<School>(x => x.school).Columns(new string [] {"name", "request_id"}).Cascade.All();
Map(x => x.province);
}
}
我还实现了从 AbstractRepository 继承的每个存储库。 “保存”方法是(以 SchoolRepository 为例)
public School saveSchool(School school)
{
var transaction = openTransaction();
session.saveOrUpdate(school);
transaction.commit();
return school;
}
这个方案行不通。 如果我创建并保存(按此顺序)一个请求,然后是引用该请求的一所学校,然后是引用学校的一个位置,我会收到“SqlParameter OutOfBound”异常。
我不知道如何映射这种关系。
在此先感谢大家。
【问题讨论】:
标签: foreign-keys fluent-nhibernate composite-primary-key composite-id