Mego(07) - 关系配置

时间:2023-03-09 17:34:45
Mego(07) - 关系配置

这个是本框架的重要功能,该关系就是指对象中的复杂对象或集合属性,该关系与EF中的关系是有区别的。EF中强调关系的成对出现,这是由于数据库关系的思想决定的。然而Mego更接近与对象化逻辑,我们只关心当前对象中某个对象或集合属性所关联的对象,以及这两个对象建立关系的主外键,因此在Mego中没有EF中的一对一,一对多,多对多的关系,我们使用三种数据注释来描述所有情况下的关系。

情况一

这种情况通常用于描述对象属性。

public class OrderDetail
{
    public int Id { get; set; }

    public int OrderId { get; set; }

    [ForeignKey("OrderId", "Id")]
    public virtual Order Order { get; set; }
}

情况二

这种情况通常用于描述集合属性。

public class Order
{
    public int Id { get; set; }

    [InverseProperty("OrderId", "Id")]
    public virtual ICollection<OrderDetail> Details { get; set; }
}

情况三

当数据关系需要第三个对象来决定时,可以使用下面的写法来描述,在这个例子中表示订单下所有明细中出现的产品。

public class Order
{
    public int Id { get; set; }

    [Relationship(typeof(OrderDetail), "OrderId", "Id", "ProductId", "Id")]
    public virtual ICollection<Product> Products { get; set; }
}

在数据注释中出现的字段名都可以是相应对象中有效的属性,而其中没有强制一定要使用主键或唯一键,这里会比EF要灵活的多。