그래서 다 대다 관계로 연결된 두 테이블 (제품 및 공급 업체)이 있습니다. 내가 그들의 관계를 매핑하는 방법C# Nhibernate - 다 대다 관계에 새 항목 추가
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; }
}
그리고 이것이 -
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; }
}
을 : 그들은 다음과 같이 코딩하고
<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>
을, 나는 ' 새 제품을 넣고 시도 할 때 문제가 있습니다. o 특약 공급자를 연결한다. 나는 이미 존재하는 것을 갱신 할 수 있었지만 새로운 것을 생성하지는 않았다.
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>'
이라고 불평했습니다.
도움을 주시면 감사하겠습니다.
몇 가지 문제가 있습니다 ... a) Supplier 클래스는 자체적으로 컬렉션이 필요하지 않으며 b) ISet 구현 클래스는 HashedSet이 아니라 HashSet입니다. 기본 생성자 내부에서 속성을 초기화하는 것이 올바른 방법입니다. +1! –
고마워, 나는 전에 그걸 생각하지 않았던지 모르겠다. @ JesseWebb, HashedSet은 실제로 나를 위해 일했지만 HashSet은 그렇지 못했습니다. – rmobis
'HashedSet' 클래스는 Spring.NET 클래스이고 (http://www.springframework.net/doc/sdk/2.0/html/Spring.Core~Spring.Collections.HashedSet.html),'HashSet' 클래스는 .NET 프레임 워크에 내장되어 있습니다 (http://msdn.microsoft.com/en-us/library/bb359438.aspx). 나는 당신이 참조 목록에 Spring을 가지고 있다면 두 가지 모두 작동 할 것이라고 생각한다. 나는 왜'HashSet'이 당신을 위해 작동하지 않았는 지 모르겠다. 아마도'using' 문을 누락했을 것이다. –