尝试创建集合并同时向其添加类别时,我总是收到空引用。我忘了什么吗?还是我做错了一切?
private static void SamepleMethod(ICollectionRepository collectionRepo)
{
Collection collection = new Collection { CollectionName = "Collection" };
Category category = new Category { Collection = collection, CategoryName = "Category" };
category.SetCollection(collection);
collection.AddCategory(category);
collectionRepo.Save(collection);
}
采集:
public class Collection
{
public virtual int? Id { get; set; }
public virtual string CollectionName { get; set; }
public virtual ICollection<Category> Categories { get; set; }
public virtual void AddCategory(Category category)
{
Categories.Add(category);
category.Collection = this;
}
}
类别:
public class Category
{
public virtual int? Id { get; set; }
public virtual string CategoryName { get; set; }
public virtual Collection Collection { get; set; }
public virtual void SetCollection(Collection collection)
{
Collection = collection;
collection.Categories.Add(this);
}
}
Collection.hbm.xml
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
namespace="ACME.Model"
assembly="ACME.Model">
<class name="Collection" table="Collections" >
<id name="Id" column="CollectionId" type="int" >
<generator class="identity" />
</id>
<set name="Categories" inverse="true" cascade="all">
<key column="CollectionId" />
<one-to-many class="Category"></one-to-many>
</set>
<property name="CollectionName">
<column name="CollectionName" sql-type="nvarchar(50)" />
</property>
Category.hbm.xml
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
namespace="ACME.Model"
assembly="ACME.Model">
<class name="Category" table="Categories" >
<id name="Id" column="CategoryId" type="int" >
<generator class="identity" />
</id>
<many-to-one name="Collection"
class="Collection"
column="CollectionId"
not-null="true" />
<property name="CategoryName">
<column name="CategoryName" sql-type="nvarchar(50)" />
</property>
最佳答案
您从未在Categories
类中初始化Collection
属性,因此该属性保持其默认值null ...
您可能需要将其初始化为构造函数中的新集合。
另外,我算出了至少3条不同的代码行,这些代码行将类别与集合相关联。
我相信一次就足够了:)(我最喜欢在AddCategory
方法中或在Category
的ctor中)。
另一个小东西-hbm映射文件已成为历史。如今,在代码中进行映射更加方便(并且不易出错)。
您可以使用旧的扩展名fluent nHibernate或新的正式的mapping-by-code(也很好,但是缺少文档)来完成此操作。