gpt4 book ai didi

c# - 如何在 NHibernate 中同时创建一个父项并向其添加一个子项?

转载 作者:太空宇宙 更新时间:2023-11-03 11:17:42 25 4
gpt4 key购买 nike

当我尝试创建一个集合并同时向它添加一个类别时,我总是得到一个空引用。我忘了什么吗?还是我做错了?

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);
}
}

集合.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>

类别.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>

最佳答案

您从未在Collection 类中初始化Categories 属性,因此它保持为默认值null...
您可能希望在构造函数中将其初始化为一个新集合。

此外,我计算了至少 3 行不同的代码行,您可以在这些代码行中将类别与集合相关联。
我相信一次就够了 :)(我最喜欢在 AddCategory 方法中,或者在 Category 的构造函数中)。

另一件小事 - hbm 映射文件已成为过去;如今,在代码中进行映射更加方便(并且不易出错)。
您可以使用旧扩展名 fluent nHibernate 来做到这一点,还是新官mapping-by-code ,这也很好,但可惜缺乏文档。

关于c# - 如何在 NHibernate 中同时创建一个父项并向其添加一个子项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12146021/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com