나는 StackOverflow와 google에서 일반적으로 검색을 해왔고, 왜 이런 일이 일어나고 있는지, 어떻게 고쳐야 하는지를 알아 내는데 어려움을 겪고있다. 나는 NHibernate와 FluentNHibernate에 익숙하다. 그러므로 부드럽게해라.Fluent NHibernate 많은 업데이트를 야기하는 단방향 관계
나는 약간의 통합 테스트를하는 동안, 판매자 이름을 수정한다면, NHibernate는 모든 연락처와 다음과 같이 로그인 스크립트를 생성 할 것이다. 그럼, Contact_Seller에있는 모든 참조를 삭제하고 readd합니다.
내지도에서 Inverse()와 같은 작업을해야한다고 생각하지만 Contact 및 Login에는 내 개체 모델의 판매자 또는 구매자에 대한 참조가 없으므로 어떻게되는지 모르겠습니다.
내 설정 (개체,지도 및 데이터베이스)입니다. 더 많은 정보와 도움이 필요하면 알려주세요.
class Buyer{
public int BuyerID {get;set;}
public Login Login {get;set;}
public IList<Contact> Contacts {get;set;}
... Other Buyer properties ...
}
class Seller{
public int SellerID {get;set;}
public Login Login {get;set;}
public IList<Contact> Contacts {get;set;}
public string Name {get;set;}
... Other Seller properties ...
}
class Login{
public int LoginID {get;set;}
public string Username {get;set;}
public byte[] Password {get;set;}
public string Email {get;set;}
}
class Contact{
public int ContactID {get;set;}
... Contact Info...
}
public BuyerMap()
{
Id(x => x.BuyerID);
... Other Seller properties ...
HasManyToMany(x => x.Contacts).Table("Contact_Buyer").Cascade.All();
References(x => x.Login).Cascade.All();
}
public SellerMap()
{
Id(x => x.SellerID);
... Other Seller properties ...
HasManyToMany(x => x.Contacts).Table("Contact_Seller").Cascade.All();
References(x => x.Login).Cascade.All();
}
public LoginMap()
{
Id(x => x.LoginID);
Map(x => x.Username);
Map(x => x.Password);
Map(x => x.Email);
}
public ContactMap()
{
Id(x => x.ContactID);
... Other Contact properties ...
}
TABLE Buyer(
[BuyerID] [int] IDENTITY(1,1) NOT NULL,
[LoginID] [int] NULL,
... Other Buyer fields ...
)
TABLE Seller(
[SellerID] [int] IDENTITY(1,1) NOT NULL,
[LoginID] [int] NOT NULL,
[Name] [varchar] NOT NULL,
... Other Seller fields ...
)
TABLE Login(
[LoginID] [int] IDENTITY(1,1) NOT NULL,
... Other Login fields ...
)
TABLE Contact(
[ContactID] [int] IDENTITY(1,1) NOT NULL,
... Other Contact fields ...
)
TABLE Contact_Seller(
[ContactID] [int] NOT NULL,
[SellerID] [int] NOT NULL,
)
TABLE Contact_Buyer(
[ContactID] [int] NOT NULL,
[BuyerID] [int] NOT NULL,
)
좋은 점 (그냥 AsSet()에 대한 연구를했습니다) 연락처 컬렉션을 ICollection으로 변경해도 여전히 AsSet()이 필요합니까? 아니면 ICollection을보고 반사 마법을 사용합니까? 나는 그것을 밖으로 시험 할 것이다! 감사합니다 – Phillip
NHibernate는 가방 Iesi.Collections.Generic.ISet가 자동으로 AsSet()이 될 것이라고 ICollection을 가정합니다 – Firo
나는 잊지 않았습니다! 나는 오늘 이것을 시험해 보았고 몇몇 시험이 실패하게 만들었다. 특히 새 판매자를 만들고 여러 개의 새 연락처 (모두 ID = 0)를 추가하면 첫 번째 연락처 만 유지됩니다. 나는 세트에 캐스팅 될 때, 모두 동일한 ID를 가지고 있기 때문에 하나의 연락처를 제외한 모든 것을 제거한다고 생각합니다. 이게 정상인가? – Phillip