首页 新闻 会员 周边

ORM如何实现以object类型为实体ID?

0
悬赏园豆:20 [已解决问题] 解决于 2017-10-24 12:04

数据库实体对象的ID,在数据库里的表现无非数值(如整数、长整数等)和字符串(纯字符串、GUID格式字符串等),但实际应用中,每一个设计需求,对ID的类型是固化的。

问题:

能否构建一个 EntityBase 类作为所有Entity的 基类,定义 类型 为 object(或其他兼容数值或字符串类型的自定义类型) 的 ID 字段,但在实际应用中,通过配置具体或默认指定 ID 内容的实际类型。

519740105的主页 519740105 | 大侠五级 | 园豆:5810
提问于:2017-10-20 10:04
< >
分享
最佳答案
0

使用Object ,你希望EF映射什麽類似到數據庫?EF 表示很爲難。。。

收获园豆:7
爱编程的大叔 | 高人七级 |园豆:30839 | 2017-10-20 22:36

没确定什么数据库。希望是通用的。

对于EF,在想如何通过映射扩展来实现这些内容。

519740105 | 园豆:5810 (大侠五级) | 2017-10-23 10:32

@519740105: 看了你的需求,这就是泛型解决的需求啊。为啥你觉得泛型不行呢?

爱编程的大叔 | 园豆:30839 (高人七级) | 2017-10-23 10:36

@爱编程的大叔: 泛型有泛型的价值,但在这个问题的处理上,我是想绕开泛型。

我想开发一个基础框架,对数据启用ID支持,但又不想限制应用(业务)对ID的类型定义,又想在基础框架里使用上这个ID值。

也曾想过定义一个接口来表述数据实体对象,最终也觉不便。

也曾想过定义一个自定义的类型(或类或接口或结构)ObjectId来表述,发现更复杂(也没进一步深入实验)。

519740105 | 园豆:5810 (大侠五级) | 2017-10-23 15:25

@519740105: 

public class EntityBase<T>

{

       T  ID{get;set;}

       //others

}

 

public class EntityA : EntityBase<int>

{

    //除了ID属性之外的others

}

 

public class EntityB :EntityBase<String>

{

 

}

 

public class EntityC: EntityBase<GUID>

{

 

}

西漠以西 | 园豆:1675 (小虾三级) | 2017-10-23 17:27
其他回答(3)
0

需要使用反射和属性读取了。

通过对象和对象的属性名称,拿到属性的值。


object obj = new ModelInfo() { Id = 123 };
int id = Convert.ToInt32(obj.GetType().GetProperty("Id").GetValue(obj));

 

上面是一个简单例子。

收获园豆:6
Supper_litt | 园豆:827 (小虾三级) | 2017-10-20 11:39

关键:我还想弄ORM,比如EF。

支持(0) 反对(0) 519740105 | 园豆:5810 (大侠五级) | 2017-10-20 14:10
0

建议加泛型

收获园豆:7
挨踢新手 | 园豆:71 (初学一级) | 2017-10-20 12:53

想过用泛型,但用了泛型后,类多了,不好弄,所以,暂时还是想通过通用的ID来表述。

支持(0) 反对(0) 519740105 | 园豆:5810 (大侠五级) | 2017-10-20 14:09
0

你需要先理解 泛型

西漠以西 | 园豆:1675 (小虾三级) | 2017-10-23 17:24

谢谢!

支持(0) 反对(0) 519740105 | 园豆:5810 (大侠五级) | 2017-10-23 17:46
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册