如何为Entity Framework实现其他实体属性?

时间:2012-08-29 11:22:15

标签: asp.net asp.net-mvc entity-framework multi-tenant

我们要求允许自定义核心产品并在每个客户端基础上添加其他字段,例如人物实体有些客户想要记录他们喜欢的颜色等。据我所知,我们不能在运行时向EF添加属性,因为它需要在启动时定义的类。每个客户都有自己的数据库,但我们正在使用所有附加代码为所有客户部署相同的解决方案。然后我们会检测他们是哪个客户并运行客户特定服务等。

现在我想要的最后一件事就是分配我的项目,或者为所有客户添加所有字段。这似乎可能成为一场噩梦。此外,通常只在非常有限的地方需要额外的字段。也许有些报道,几个屏幕等等。

我从Jermey Miller http://codebetter.com/jeremymiller/2010/02/16/our-extension-properties-story/找到了这篇文章,描述了他们如何添加扩展属性并让他们从域到网络前端。

有没有其他人使用EF实现类似的东西?它是如何运作的?有没有人见过的博客/样本?我不确定我是否正在寻找合适的东西,即使有人可以告诉我我们想做的通用名称会有所帮助。我猜这是其他人的问题。

1 个答案:

答案 0 :(得分:1)

链接问题仍然需要在单个解决方案中分叉或实施所有可能的扩展,因为您仍在预先创建强类型扩展(=您事先知道客户想要的扩展)。它通常不是可扩展的解决方案。如果您需要通用可扩展解决方案,则必须保留强类型世界并将扩展描述为数据。

您需要使用一些元模型。您的实体类将仅包含所有客户使用的属性和导航属性到特殊扩展实体(每个可扩展实体的附加表),您可以在其中添加其他属性作为名称/值对(您可以添加其他列,如类型,验证等,如果需要)。

这通常会将您的模型的一部分从硬编码场景移动到基于配置的场景,甚至允许您的客户在运行时定义扩展(如果您实现此类功能)。