是否可以与Entity框架建立复杂的关系?

时间:2017-08-04 21:16:17

标签: c# asp.net-mvc entity-framework asp.net-mvc-5 entity

我有一个应用程序,它与实体6框架一起编写在ASP.NET MVC 5框架的顶部。我使用数据库优先方法而不是代码优先方法。

我知道如何使用public virtual RelationModel Relation { get; set }public virtual ICollection<RelationModel> Relations { get; set }等虚拟导航在我的模型之间建立简单关系

然而,这次要求更加棘手。我需要能够使用复合键而不仅仅是单个列来构建关系。我想添加一个关系,其中一方的joiner / join-clause应该是另一方的名为LocalDateDateOf的计算属性 AND OwnerId列== UserId另一方。

这是我的模型的一个例子

我的父模型如下所示

public Entry 
{
    [Key]
    public int Id { get; set; }
    public string Name { get; set; }
    [ForeignKey("Owner")]
    public int OwenerId { get; set; }
    public DateTime StartedAt { get; set; }
    public int UtcOffset { get; set; }

    public virtual User Owner { get; set; }

    // This puts the StartedAt in the correct date state which is needed for the relation
    [DatabaseGenerated(DatabaseGeneratedOption.Computed)]
    public DateTime LocalDate 
    {
        get
        {
            return StartedAt.AddSeconds(UtcOffset * -1).Date;
        }
    }

    // This is the relation that needs a complex join clause
    public virtual ICollection<Bucket> Buckets { get; set }
}

这是我的孩子模型如下所示

public Bucket 
{
    [Key]
    public int Id { get; set; }
    public string Name { get; set; }

    public int UserId { get; set; }
    public DateTime DateOf { get; set; }  //This is a date it or stored with 00:00:00.000 time in the database

    public virtual User Owner { get; set; }
}

从我的Entry模型中,我希望能够使用以下逻辑Buckets

访问我的Entry.LocalDate == Bucket.DateOf && Entry.UserId == Bucket.UserId关系

请注意,LocalDate属性不是数据库列,而是计算属性

是否可以在我的模型之间构建这种关系,我可以使用.Include(x => x.Buckets)来获得相应的关系?如果是这样,怎么样?如果不可能,可以使用哪些其他想法来提供相同的结果?

0 个答案:

没有答案