繁体   English   中英

EF4 和通用数据库方法

[英]EF4 and generic database approach

我有一个通用表来存储这样的关系:

 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)

我如何在实体框架 model 中表示它,以便我可以轻松地处理每个实体关系? 例如,我希望能够做到这一点:

  • company.Relationships.ToList()到 select 从公司到所有其他实体的所有关系(我可以通过创建视图并通过关联将其映射到 model EF 中来做到这一点)
  • company.Relationships.Add(..); context.SaveChanges() company.Relationships.Add(..); context.SaveChanges()向公司添加新关系并能够保存它。 这是棘手的部分。

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

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

实体框架依赖于正确的(假定的)数据库架构,它不提供数据驱动的映射。 一旦涉及到这样的任何数据库级抽象,您将无法通过实体框架将其分解回假定的概念 model。 您需要从数据库视图和存储过程构建全新的数据库层,以在 EF 预期的设计和您的设计之间架起一座桥梁。 只有在此桥接 SQL 之后,您才能使用类似company.Relationships之类的东西

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM