使用多列将模型映射到其他模型

时间:2012-03-19 08:23:45

标签: asp.net-mvc entity-framework ef-code-first

在我试图解释的时候,我甚至都不知道如何与我一起搜索这个。

我有两种模式:

public class Destinations
{
    public int DestinationsID { get; set; }
    public virtual Navigation Navigation { get; set; }
}

public class Navigation
{
    public int NavigationID { get; set; }
    public string ParameterName { get; set; }
    public int ParameterValue { get; set; }
    public string FriendlyURL { get; set; }
}

两者都有更多,但这些都是重要的一点。保存目的地时,我将Navigation ParameterName设置为“Destination”,将ParameterValue设置为DestinationID。

我无法将目的地映射到导航,因为导航根本不依赖于目的地。它可以将任何模型作为ParameterName,将ParameterValue作为该模型的ID(或者它们都可以为null,因为它只与页面相关而不是任何其他模型)。

因此,当我要么查看单个目的地或循环浏览列表时,我需要能够获得Navigation.FriendlyURL。这就是为什么我添加了公共虚拟导航导航{get;组; }。在我的映射类中,虽然我需要能够根据Destinations.DestinationID的“Destination”和ParameterValue的ParameterName获取导航。这就是我完全陷入困境的地方。

我假设我需要这样的东西:

        this.HasRequired(d => d.Navigation)
            .WithRequiredDependent(WHAT GOES HERE)
            .Map(WHAT GOES HERE)
            .WillCascadeOnDelete(false);

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

如果您要在Navigation中映射Destinations属性,可以尝试这样的事情

    this.HasRequired(d => d.Navigation)
        .WithMany()
        .WillCascadeOnDelete(false);

修改 您无法映射此关系,但您可以构建查询以使用手动关系修复来检索这两种关系。

var query = (from d in db.Destinations
        join n in db.Navigations on d.DestinationsID equals n.ParameterValue
                where n.ParameterName == "Destination" 
        select new { d, n }).ToList();

// Display joined groups.
foreach (var group in query)
{
    group.d.Navigation = group.n;
}