J'utilise Fluent NHibernate dans une tentative d'améliorer la testabilité et la maintenabilité sur une application web qui utilise une base de données existante et je vais avoir quelques problèmes cartographier cette structure correctement:Courant NHibernate Inscrit Références Ignorer Règle Cascade
J'ai deux tables qui représentent vraiment une entité dans le domaine, et donc j'utilise une jointure pour les mapper en tant que tel, et une troisième table qui représente une deuxième entité.
Tables DB:
[eACCT]
ACCT_ID
ACCT_NAME
[eREPORT_TYPE]
ACCT_ID
REPORT_NO
[eREPORT_TYPE_DESC]
REPORT_NO
REPORT_TYPE
Entités:
public class Account
{
public virtual string AccountID { get; set; }
public virtual string AccountName { get; set; }
public virtual ReportType ReportType { get; set; }
}
public class ReportType
{
public virtual int Number { get; set; }
public virtual string Type { get; set; }
}
Cartographie:
public AccountMap()
{
Table("eACCT");
Id(x => x.AccountID, "ACCT_ID");
Map(x => x.AccountName, "ACCT_NAME");
Join("eREPORT_TYPE", m =>
{
m.KeyColumn("ACCT_ID");
m.References(x => x.ReportType)
.Cascade.None()
.Column("REPORT_NO");
});
}
public ReportTypeMap()
{
Table("eREPORT_TYPE_DESC");
Id(x => x.Number)
.Column("REPORT_NO")
.GeneratedBy.Assigned();
Map(x => x.Type, "REPORT_TYPE");
}
Cela fonctionne bien pour mon GETS, b Lorsque je modifie Account.ReportType.Number puis SaveOrUpdate() Account, j'obtiens l'erreur: 'l'identifiant d'une instance de DataTest.Model.ReportType a été modifié de (old_value) à (new_value)'. Tout ce que je veux faire est de modifier la référence du compte à ReportType et je pensais qu'en définissant la propriété Cascade.None() sur la référence à ReportType, NHibernate ne tenterait pas d'enregistrer l'instance ReportType, mais je dois être mal compris comment cela fonctionne. J'ai essayé de faire ReportType ReadOnly(), en faisant la référence à ReportType ReadOnly(), etc et rien ne semble aider.
Des idées?