règle en cascade d'une convention que j'ai deux classesComment remplacer dans Fluent NHibernate
public class Document
{
public virtual int Id { get; set; }
public virtual IList<File> Files { get; set; }
}
public class File
{
public virtual int Id { get; protected set; }
public virtual Document Document { get; set; }
}
la convention suivante:
public class HasManyConvention : IHasManyConvention
{
public bool Accept(IOneToManyPart target)
{
return true;
}
public void Apply(IOneToManyPart target)
{
target.Cascade.All();
}
}
et ceux-ci cartographie l'emporte sur
public class DocumentMappingOverride : IAutoMappingOverride<Document>
{
public void Override(AutoMap<Document> mapping)
{
mapping.HasMany(x => x.Files)
.Inverse()
// this line has no effect
.Cascade.AllDeleteOrphan();
}
}
public class FileMappingOverride : IAutoMappingOverride<File>
{
public void Override(AutoMap<File> mapping)
{
mapping.References(x => x.Document).Not.Nullable();
}
}
Je comprends que je dois faire un IClassConvention pour Document à changer le ca Scade comportement, mais je ne peux pas obtenir ce travail! Si je fais ceci:
public class DocumentConvention : IClassConvention
{
public bool Accept(IClassMap target)
{
return target.EntityType == typeof(Document);
}
public void Apply(IClassMap target)
{
target.SetAttribute("cascade", "all-delete-orphan");
}
}
je reçois: "L'attribut 'cascade' est pas déclarée."
Si je fais ceci:
public class DocumentConvention : IClassConvention
{
public bool Accept(IClassMap target)
{
return target.EntityType == typeof(Document);
}
public void Apply(IClassMap target)
{
target.HasMany<Document, File>(x => x.Files)
.Inverse()
.Cascade.AllDeleteOrphan();
}
}
Puis-je obtenir:
"Duplicate collection role mapping Document.Files"
donc j'ajouté:
mapping.IgnoreProperty(x => x.Files);
à mon mappage de documents, mais des fichiers est toujours vide. Qu'est-ce que je fais de mal? Comment puis-je remplacer la règle de cascade pour une seule relation HasMany? Merci Andrew
P.s. Désolé pour le poste croisé avec this mais j'ai besoin d'obtenir ce résolu dès que possible.