したがって、多対多の関係を介して接続された 2 つのテーブル (Product と Supplier) があります。それらは次のようにコード化されています。
class Product
{
public virtual uint id { get; set; }
public virtual string name { get; set; }
public virtual float stock { get; set; }
public virtual float value { get; set; }
public virtual Category category { get; set; }
public virtual ISet suppliers { get; set; }
public virtual ISet saleItems { get; set; }
public virtual ISet stockInlets { get; set; }
}
-
class Supplier
{
public virtual uint id { get; set; }
public virtual string name { get; set; }
public virtual string CNPJ { get; set; }
public virtual string addressLine1 { get; set; }
public virtual string addressLine2 { get; set; }
public virtual string telephone1 { get; set; }
public virtual string telephone2 { get; set; }
public virtual ISet products { get; set; }
public virtual ISet stockInlets { get; set; }
}
そして、これが私が彼らの関係をマッピングした方法です:
<set name="suppliers" table="product_x_supplier" fetch="join" lazy="false">
<key column="product_id" />
<many-to-many class="Supplier" column="supplier_id" />
</set>
-
<set name="products" table="product_x_supplier" fetch="join" lazy="false">
<key column="supplier_id" />
<many-to-many class="Product" column="product_id" />
</set>
現在、新しい製品を挿入して対応するサプライヤーをそれにリンクしようとすると問題が発生します。既存のものを更新することはできましたが、新しいものを作成することはできませんでした。使用しようとしている(簡略化された)コードは次のとおりです。
Product p = new Product()
{
name = "Test product",
stock = 0,
value = 2,
category = (Category)cats[0]
};
for (int i = 0; i < suppliers.Length; i++)
{
p.suppliers.Add(suppliers[i]);
}
repository.Add(p);
それは教えてくれObject reference not set to an instance of an object.
ます。オブジェクトをインスタンス化しようとしましたが、次のようにしp.suppliers = new IList<Supplier>();
ましたが、それは不平を言いましたCannot create an instance of the abstract class or interface 'System.Collections.Generic.IList<TCC.Hibernate.Domain.Classes.Supplier>'
。
どんな助けでも大歓迎です。