讨论ORM工具的不足
最近使用Nhibenate,但是发现其映射的对象必须所有的属性都被映射才行,被映射的对象不能含有方法或其他属性。这样的话,使用ORM工具,只能方便地对PO和持久层之间进行映射,而PO与DO之间还需要进行繁琐的转换。
试想,如果ORM工具能够部分映射,那么就可以直接在DO和持久层之间进行映射,这样岂不是可以省很多事。
大家觉得呢? orm 对象 --------------------编程问答-------------------- 那你可以试下Entity Framework。 --------------------编程问答--------------------
谣言
--------------------编程问答--------------------
求教啊 --------------------编程问答-------------------- 所有 public protected 方法和属性都加上 virtual --------------------编程问答--------------------
所有 public protected 方法和属性都加上 virtual
您用的什么版本? --------------------编程问答--------------------
所有 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这两个属性,只要在映射文件里不设置就行了?
--------------------编程问答-------------------- 是的,不设置就行了 --------------------编程问答-------------------- 我试了一下,楼上正解,我原来出错的原因因该是方法没有加virtual属性。 --------------------编程问答-------------------- 那我再提一个问题哈。
<?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>
假设使用领域驱动开发,如果直接映射,层的结构怎么设置?
我的设想是:在领域层定义IRespository,然后在DAL实现,实现时就使用ORM映射。但是这样一来,则会造成DAL对领域模型的依赖,这样好吗?
请问各位大神有什么高见吗? --------------------编程问答-------------------- 不要 DAL,Repository 就是领域层的一部分,把 Repository 想象成领域对象在内存里的集合
但是我没有说可以不考虑关系数据库的特点,实际上折中和优化是必须的 --------------------编程问答-------------------- ORM 最大的不足还是性能吧,我们在web里面用LINQ,在后台服务里面还是直接写sql的
补充:.NET技术 , 分析与设计