[英]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.