实体框架并设置查找/列表以及m2m关系

时间:2014-01-23 03:29:07

标签: sql entity-framework ef-code-first

我总是很难用这个。这是一个简单的问题,我知道我希望数据库最终看起来如何,但我不知道如何到达那里。我有以下实体:

组织

public class Organization
{
    [Key]
    public int OrganizationId { get; set; }
    public string Name { get; set; }
    public ICollection<Industry> OrgIndustries { get; set; }
}

行业

public class Industry
{
    public int Id { get; set; }
    public string Name { get; set; }
}

用户案例是组织可以拥有一个或多个行业(即高等教育和信息技术)。出于应用目的,我希望Industry表可以作为一个不断增长的行业列表,只有名称和ID,没有FK。所以,你知道,一个简单的查找表。最重要的是,我还需要一种方法来跟踪组织所属的行业。在数据库中,它看起来像这样(伪):

[OrgTable]
   ColId
   Col-OrgIndustryTableFK
   ...

[OrgIndustryTable]
   ColId
   ColOrgId
   ColIndustryId

[Industry]
   ColId
   ColName

我设置它的方式现在为Industry表中的Org_Id创建了FK。不是我想要的。我怎样才能得到我想要的东西?

1 个答案:

答案 0 :(得分:1)

如果您只想坚持数据注释,只需添加一个属性Industry引用Organization s的集合:

public class Industry
{
    public int Id { get; set; }
    public string Name { get; set; }
    // don't forget to make it virtual if you want to option to lazy load
    public virtual ICollection<Organization> IndustryOrgs { get; set; }
}

如果您不想将该属性添加到Industry类,可以通过流畅的API进行配置:

modelBuilder.Entity<Organization>()
    .HasMany( o => o.OrgIndustries )
    // configures the relationship to be many:many 
    //  without a navigation property on the other 
    //  side of the relationship
    .WithMany();