首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对象关系管理如何解决实体之间的双向关系(例如NHibernate)?

对象关系管理如何解决实体之间的双向关系(例如NHibernate)?
EN

Stack Overflow用户
提问于 2009-12-17 03:58:54
回答 4查看 444关注 0票数 0

我正在为我的RDBMS课程写作业,我需要在相当简单的域上执行CRUD操作,这是网络运动锦标赛。

学生被要求使用ADO.NET,我的问题是如何解决双向关系,例如1:m (每个冠军有许多比赛,但每个比赛只属于一个确切的冠军)?在我看来,必须要有一些技术来做到这一点。

对我来说最有趣的部分是-像EF或NHibernate这样的对象关系管理是如何解决这种情况的?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-12-17 04:05:37

在NHibernate中,它非常简单和直接。下面是域类的外观,后面是流畅的映射。这里假设您将使用NHibernate来生成您的模式。如果要映射遗留数据库,则只需设置所使用的列名和表名即可。

代码语言:javascript
复制
public class Championship {
  public virtual int Id { get; set; }
  public virtual IList<Match> Matches { get; set; }
}


public class Match {
  public virtual int Id { get; set; }
  public virtual Championship Champioship { get; set; }
}


public class ChampionshipMap : ClassMap<Championship> {
  public ChampionshipMap() {
    Id(x => x.Id);
    HasMany(x => x.Matches);
  }
}


public class MatchMap : ClassMap<Match> {
  public MatchMap () {
    Id(x => x.Id);
    References(x => x.Championship);
  }
}
票数 1
EN

Stack Overflow用户

发布于 2009-12-17 04:02:06

看看Davy Brions Blog中关于构建您自己的数据访问层的内容。他谈到了所有这些挑战。

票数 1
EN

Stack Overflow用户

发布于 2009-12-17 04:04:36

对于像Hibernate中的多对多这样的东西,您可以定义关系。下面是一个示例(引用为here

代码语言:javascript
复制
<class name="Person">
    <id name="id" column="personId">
        <generator class="native"/>
    </id>
    <set name="addresses" table="PersonAddress">
        <key column="personId"/>
        <many-to-many column="addressId"
            class="Address"/>
    </set>
</class>

<class name="Address">
    <id name="id" column="addressId">
        <generator class="native"/>
    </id>
    <set name="people" inverse="true" table="PersonAddress">
        <key column="addressId"/>
        <many-to-many column="personId"
            class="Person"/>
    </set>
</class>

从数据库本身来看,对于多对多关系,通常会有一个链接表。

所以我们会有:

代码语言:javascript
复制
PERSON
ADDRESS
PERSON_ADDRESS

PERSON_ADDRESS表将包含将两个实体链接在一起的person_id和address_id。因此,一个人可能有多个地址,而一个给定的地址可能属于多个人或公司。

对于1:m的关系,拥有以下内容就足够好了:

代码语言:javascript
复制
PERSON
ADDRESS

在address中,您将拥有person_id列,但是对于给定的person_id,可能有许多地址记录,这为您提供了1:m功能。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1917258

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档