我有一个应用程序,它与实体6框架一起编写在ASP.NET MVC 5框架的顶部。我使用数据库优先方法而不是代码优先方法。
我知道如何使用public virtual RelationModel Relation { get; set }
或public virtual ICollection<RelationModel> Relations { get; set }
等虚拟导航在我的模型之间建立简单关系
然而,这次要求更加棘手。我需要能够使用复合键而不仅仅是单个列来构建关系。我想添加一个关系,其中一方的joiner / join-clause应该是另一方的名为LocalDate
和DateOf
的计算属性 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)
来获得相应的关系?如果是这样,怎么样?如果不可能,可以使用哪些其他想法来提供相同的结果?