当前位置:编程学习 > C#/ASP.NET >>

讨论ORM工具的不足

最近使用Nhibenate,但是发现其映射的对象必须所有的属性都被映射才行,被映射的对象不能含有方法或其他属性。
这样的话,使用ORM工具,只能方便地对PO和持久层之间进行映射,而PO与DO之间还需要进行繁琐的转换。
试想,如果ORM工具能够部分映射,那么就可以直接在DO和持久层之间进行映射,这样岂不是可以省很多事。
大家觉得呢? orm 对象 --------------------编程问答-------------------- 那你可以试下Entity Framework。 --------------------编程问答--------------------
引用 楼主 sdxu8888 的回复:
最近使用Nhibenate,但是发现其映射的对象必须所有的属性都被映射才行,被映射的对象不能含有方法或其他属性。


谣言
--------------------编程问答--------------------
引用 2 楼 u012142399 的回复:
Quote: 引用 楼主 sdxu8888 的回复:

最近使用Nhibenate,但是发现其映射的对象必须所有的属性都被映射才行,被映射的对象不能含有方法或其他属性。


谣言


求教啊 --------------------编程问答-------------------- 所有 public protected 方法和属性都加上 virtual --------------------编程问答--------------------
引用 4 楼 u012142399 的回复:
所有 public protected 方法和属性都加上 virtual


您用的什么版本? --------------------编程问答--------------------
引用 4 楼 u012142399 的回复:
所有 public protected 方法和属性都加上 virtual



[Serializable]
    public class ProjectDO
    {
        private int projectid;
        private string mingcheng;
        private string dianyadengji;
        private string bianhao;
        private bool isbudgetinfoload;
        private bool isscheduleinfoload;
        private ProjectBudgetInfo projectbudgetinfo;
        private ProjectScheduleInfo projectscheduleinfo;

        public virtual int ProjectId
        {
            set { projectid = value; }
            get { return projectid; }
        }

        public virtual string MingCheng
        {
            set { mingcheng = value; }
            get { return mingcheng; }
        }

        public virtual string DianYaDengJi
        {
            set { dianyadengji = value; }
            get { return dianyadengji; }
        }

        public virtual string BianHao
        {
            set { bianhao = value; }
            get { return bianhao; }
        }

        public virtual  bool IsBudgetInfoLoad
        {
            get
            {
                return isbudgetinfoload;
            }
        }

        public virtual  bool IsScheduleInfoLoad
        {
            get
            {
                return isscheduleinfoload;
            }
        }

    }


这个类,比如我不想映射IsBudgetInfoLoad, IsScheduleInfoLoad这两个属性,只要在映射文件里不设置就行了?

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
  <class name="NGIPORMtest.Project, NGIPORMtest" table="Project">
    <id name="ProjectId" type="int" unsaved-value="null">
      <column name="ProjectId"  sql-type="int" not-null="true" unique="true" />
      <generator class="native" />
    </id>
    <property name="mingcheng" type="String">
      <column name="mingcheng" length="50" sql-type="nvarchar" not-null="false"/>
    </property>
    <property name="dianyadengji" type="String">
      <column name="dianyadengji" length="50" sql-type="varchar" not-null="false"/>
    </property>
    <property name="bianhao" type="String">
      <column name="bianhao" length="50" sql-type="String" not-null="false"/>
    </property>
  </class>
</hibernate-mapping>

--------------------编程问答-------------------- 是的,不设置就行了 --------------------编程问答-------------------- 我试了一下,楼上正解,我原来出错的原因因该是方法没有加virtual属性。 --------------------编程问答-------------------- 那我再提一个问题哈。
假设使用领域驱动开发,如果直接映射,层的结构怎么设置?
我的设想是:在领域层定义IRespository,然后在DAL实现,实现时就使用ORM映射。但是这样一来,则会造成DAL对领域模型的依赖,这样好吗?
请问各位大神有什么高见吗? --------------------编程问答-------------------- 不要 DAL,Repository 就是领域层的一部分,把 Repository 想象成领域对象在内存里的集合

但是我没有说可以不考虑关系数据库的特点,实际上折中和优化是必须的 --------------------编程问答-------------------- ORM 最大的不足还是性能吧,我们在web里面用LINQ,在后台服务里面还是直接写sql的
补充:.NET技术 ,  分析与设计
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,