如何为实体框架中的所有实体定义公共属性
想象一下,我有几乎所有实体的 UserId(实际上我们确实有大约四列,例如几乎所有表的 userId、adddate、moddate 等)列。
如何使这样的列在单独的实体(例如父实体)中可用,并使所有其他实体(子实体)继承它?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
尝试使用 T4 模板,如下所述 此处 或此处,修改模板 包含一个具有这些属性的基类(继承自 EntityObject),并从该基类继承每个类。
Try using T4 templates like it is described here or here, modify the template to contain a base class (inherited from EntityObject) having these properties, and inherit each class from this base class.
如果您使用生成的实体类(POCO 或
EntityObject
),您将必须在模型 (EDMX) 中定义基本抽象实体并在 TPC 继承中派生其他实体 - 只是不要这样做,因为它会引入许多其他问题 - 例如,您将从基本类型的单个ObjectSet
访问所有实体,PK 在所有实体中必须是唯一的,等等。另一种方法是使用自定义 POCO类(未生成)或自定义 T4 模板来创建公共对象继承,但仍使用设计器中的普通实体而无需继承。我认为这是不可能的,但几天前我用简单的例子测试了它并且它有效 - 但我仍然对这种方法有点怀疑。
If you are using generated entity classes (either POCO or
EntityObject
) you will have to define base abstract entity in your model (EDMX) and derive other entities in TPC inheritance - simply don't do that because it will introduce so many other problems - for example you will access all entities from the singleObjectSet
of the base type, PK will have to be unique among all your entities, etc.Another way is either using custom POCO classes (not generated) or custom T4 template to create common object inheritance but still using normal entities in the designer without inheritance. I thought that this is not possible but few days ago I tested it with simple example and it worked - but I'm still little bit suspicious to this approach.