这个是本框架的重要功能,该关系就是指对象中的复杂对象或集合属性,该关系与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要灵活的多。