私はStackOverflowとgoogle全般で検索を行いましたが、なぜこれが発生しているのか、そしてそれを修正する方法を見つけるのにまだ問題があります。私はNHibernateとFluentNHibernateを初めて使用するので、優しくしてください:)
いくつかの統合テストを行っているときに、セラーの名前を変更するだけで、NHibernateがすべての連絡先とログインの更新スクリプトを生成し、Contact_Sellerのすべての参照を削除して読み取ることがわかりました。
マップで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,
)