EF4和通用数据库方法

时间:2011-07-12 05:18:52

标签: .net entity-framework-4

我有一个用于存储这种关系的通用表:

 CREATE TABLE Relationship  (
    [ID] [bigint] IDENTITY(1,1) NOT NULL,
    [FromMemberID] [bigint] NOT NULL,
    [FromMemberType] [varchar](255) NOT NULL,
    [ToMemberID] [bigint] NOT NULL,
    [ToMemberType] [varchar](255) NOT NULL,
    [RoleDescriptorID] [bigint] NULL)

我还有其他一些参与关系的表格:

 CREATE TABLE Company (
    [ID] [bigint] IDENTITY(1,1) NOT NULL,
    [Name] [nvarchar](255) NOT NULL)

 CREATE TABLE Person (
    [ID] [bigint] IDENTITY(1,1) NOT NULL,
    [Name] [nvarchar](255) NOT NULL,
    [Email] [nvarchar](255) NOT NULL)

 etc.

所以关系存储如下:

ID | FromMemberID | FromMemberType | ToMemberID | ToMemberType | RoleDescriptorID
---------------------------------------------------------------------------------
 1 |            1 | Person         |          1 | Company      | 1 (Contractor)
 1 |            2 | Person         |          1 | Company      | 2 (Employee)
 1 |            2 | Company        |          1 | Company      | 3 (Customer)

如何在Entity Framework模型中表示它,以便我可以轻松地处理每个实体关系?例如,我希望能够这样做:

  • company.Relationships.ToList()选择从公司到所有人的所有关系 其他实体(我可以通过创建一个视图并通过关联在模型EF中映射它来实现)
  • company.Relationships.Add(..); context.SaveChanges()为公司添加新关系并能够保存。这是棘手的部分。

有什么建议吗? (我必须继续使用这个表结构)

1 个答案:

答案 0 :(得分:1)

您必须完全按照在数据库中定义的方式使用它。您将拥有Company实体,Person实体,Relationship实体,并且您所有的真实关系将在最后提到的实体中保持为字符串。

实体框架依赖于正确的(假设的)数据库体系结构,并且它不提供数据驱动的映射。一旦涉及到这样的任何数据库级抽象,您将无法通过实体框架将其分解回所谓的概念模型。您需要从数据库视图和存储过程构建全新的数据库层,以便在EF和您的设计期望的设计之间建立桥梁。只有在这个桥接SQL之后,您才能使用company.Relationships

之类的东西
相关问题