c# – 是否可以在NHibernate中初始化集合时添加多对多关系?

c# – 是否可以在NHibernate中初始化集合时添加多对多关系?,第1张

概述这是我的班级: public class User{ public int Id { get; set; } public string Name { get; set; } public ISet<User> Friends { get; set; }} 这是我的映射: <?xml version="1.0" encoding="utf-8" ?><hibernate-map 这是我的班级:

public class User{  public int ID { get; set; }  public string name { get; set; }  public ISet<User> FrIEnds { get; set; }}

这是我的映射:

<?xml version="1.0" enCoding="utf-8" ?><hibernate-mapPing xmlns="urn:nhibernate-mapPing-2.2"  namespace="Test" assembly="test">  <class name="User" table="Users">      <ID name="ID" column="ID">          <generator />      </ID>      <property name="name" column="name"/>      <set name="FrIEnds" table="FrIEnds">          <key column="user_ID"/>          <many-to-many  column="frIEnd_ID"/>      </set>  </class></hibernate-mapPing>

这是问题所在:

User user = session.Load<User>(1);User frIEnd = new User();frIEnd.name = "new frIEnd";user.FrIEnds.Add(frIEnd);

在最后一行[user.FrIEnds.Add(frIEnd)],我注意到它会在添加新朋友之前初始化FrIEnds集合.

我的问题是:无论如何都要避免NHibernate中的这种行为?因为性能原因我只想要执行单个INSERT命令.

解决方法 来自Hibernate.org

Why does Hibernate always initialize a collection when I only want to add
or remove an element?

Unfortunately the collections API
defines method return values that may
only be computed by hitting the
database. There are three exceptions
to this: Hibernate can add to a,
or declared with
inverse=”true” without initializing
the collection; the return value must
always be true.

If you want to avoID extra database
traffic (IE. in performance critical
code),refactor your model to use only
many-to-one associations. This is
almost always possible. Then use
querIEs in place of collection access.

此外,阅读此博客条目NHibernate and Inverse=True|False Attribute,肯定会有所帮助.

将帖子

好吧,想想多对一和多对一.哪一个是同一个.这就是为什么他们说重构模型.你需要引入另一个实体,比如UserFrIEnd或者其他东西.现在,您将为User-to-UserFrIEnd,FrIEnd-to-UserFrIEnd进行多对一 *** 作.

因此,正如您所看到的,这将使它成为多对多.我希望这能使重构事情变得清晰.您可能不想这样做,除非您遇到的是真实的糟糕表现.正如Darin已经提到的那样,其中一条评论认为,不要做预先成熟的优化.此外,我想引用Donald E. knuth的臭名昭着的格言,“过早的优化是所有邪恶的根源”.

总结

以上是内存溢出为你收集整理的c# – 是否可以在NHibernate中初始化集合时添加多对多关系?全部内容,希望文章能够帮你解决c# – 是否可以在NHibernate中初始化集合时添加多对多关系?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1233371.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存