基于实体框架规则条件的关系

时间:2013-07-18 05:53:47

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

我需要在三个实体之间建立关系Party - Organization Party - Person

但是,有一次,Party将成为组织或人员,如下所示。

conditionalRelations: {    
    PartyTypeCode: {
        "1": { entity: "Person" },
        "2": { entity: "Organization" }
      }
}

如果派对类型为1,则关系将为Party ->Person 如果派对类型为2,那么关系将为Party-> Organization

我需要在ASP.NET MVC4 scaffolding中配置此关系。(实体框架代码优先)

1 个答案:

答案 0 :(得分:0)

自从我执行EF Code First以来已经有一段时间了,但我相信这应该(或多或少)做到这一点(假设它是你想要制作的新数据库):

abstract class Party {
    int Field1 {get;set;}
    int Field2 {get;set;}

    virtual ICollection<PartyType1Party> Parties {get;}
}

class Person {
    string Name {get;set;}
    int Age {get;set;}
}

class OrganizationParty {
    int Something {get;set;}
    int OtherThing {get;set;}

    virtual ICollection<PartyType2Party> Parties {get;}
}

class PartyType1Party : Party {
    Person OrganizerOrSomeRandomPropertyName {get;set;}
}

class PartyType2Party : Party {
    OrganizationPart Organization {get;set;}
}

class Context : DbContext {
    DbSet<Party> Parties {get;set;}
    DbSet<Person> Persons {get;set;}
    DbSet<OrganizationParty> OrganizationParties {get;set;}
}

不是手动跟踪哪一方是类型1和类型2,而是让EF为您处理(通过您正在处理的类)。如果你已经拥有一个现有的数据库,并且需要遵循它的scheem,那么我不知道如何解决它(虽然我做了类似的事情,我不记得如何)。