如何拥有一个本身拥有外键引用的列的多个实例?

时间:2015-04-06 10:23:06

标签: wpf entity-framework mvvm

我是Visual Studio的新手,所以为了开始学习它,我首先下载了https://code.msdn.microsoft.com/ADPNET-Entity-Framework-2d1160cb提供的样本并开始解决它。由于我对VB6和SQL有相当深的了解,因此我不需要花太多时间来理解样本所基于的整个模式。如果微软给出了详细解释或者对示例进行了详细说明,那么理解基础知识会更加容易。但是,我以某种方式设法解决它并使用Entity Framework和MVVM在wpf中构建了一个小型桌面应用程序。但有一点已经到来,我完全陷入困境,找不到任何出路。问题如下:

我有两张桌子。 1个倡导者和2个党。 Table Advocate将包含拥护者的名字,并且具有主键。同样,Party将拥有名称及其各自的主键。

然后我又有两个表1. Case和2 CaseDetail。表格案例只包含三列:1。CaseId 2. CaseNo和3. Year。 Table CaseDetail将CaseDetailId作为主键,CaseId作为外键。现在我需要的是一个特定的案例可能有多个拥护者和多个请愿者。因此表CaseDetail将有两列将advocateId和PartyId作为外键。

如果你看一下上面提到的样本,你就不会找到如何处理这种情况。当我遵循示例模式时,我会遇到设计时和运行时错误。

无论如何,经过多次试验,我已经以某种方式管理设置EF权利,但我怀疑它是否有用,因为我需要有多个请愿者和倡导者的实例。

以下是我的edmx的链接:

https://www.dropbox.com/s/rkarzod1lezdnqs/EDMX.png?dl=0

从图像可以看出,我有四个不同的外键fldPetitioner,fldRespondent,fldAdvocate和fldSrAdvocate,我也有导航属性来追溯它们具有多重性0或1.因此,在这种情况下我会能够在这些列上有多个实例吗?

因此,请在使用Entity Framework和MVVM开发WPF应用程序时,建议在上述场景中采用什么策略。

2 个答案:

答案 0 :(得分:0)

我认为这听起来像是你尝试使用一对一的关系,应该有一对一的关系。仔细查看链接的MS样本中Department和Employee之间的关系。这导致了许多员工的部门工作。这使得DepartmentId对应于Employee表中的一个条目,而不是相反的,这是我认为你现在所拥有的。您问题中的类似元素将是“许多倡导者的案例详情”。

public class CaseDetail
{
    //CaseDetail ID number
    public int CaseDetailId { get; set; }

    //...
    //Any other properties go here
    //...

    //Navigation properties
    public ICollection<Advocate> Advocates { get; set; }

    /* Other collections would be executed similarly:
     *
     * public ICollection<Party> Petitioners { get; set; }
     * public ICollection<Party> Respondents { get; set; }
    */
}

public class Advocate
{
    //Advocate ID number
    public int AdvocateId { get; set; }

    //...
    //Any other properties go here
    //...

    //Navigation properties
    public int CaseDetailId { get; set; }
    public CaseDetail CaseDetail { get; set; }
}

public class AdvocateConfiguration : EntityTypeConfiguration<Advocate>
{
    public AdvocateConfiguration()
    {
        HasRequired(a => a.CaseDetail)
                .WithMany(cd => cd.Advocates);
    }
}

答案 1 :(得分:0)

在MS示例中,您必须注意到在输入数据时我们将部门分配给员工,尽管部门与员工的关系是1到多。在我的情况下,问题是我希望将支持者分配给casedetail,尽管提倡者的关系案例是1对多。这里简单地想象一个简单的计费应用程序,其中表发票可以是一个主表,其中包含表invoicedtails中的详细信息,其中我们可以将多个产品作为外键。考虑到这种情况,请告诉我是否可以有一个带有导航属性的衍生实体来追溯产品?