J'essaie de mapper un nombre à-plusieurs, mais la mise en correspondance ne fonctionne pas (propriété de liste reste nulle et les articles ne sont pas stockésFluentNHibernate AutoMapping ManyToMany
J'utilise les tableaux suivants:.
User(Id, Name, Password,...)
Role(Id, Name)
RoleUser(UserId, RoleId) with a compound primary key
Mes fichiers entité sont
public class User
{
public virtual int Id { get; protected set; }
public virtual string UserName { get; set; }
public virtual IList<Role> Roles { get; set; }
}
public class Role
{
public virtual int Id { get; protected set; }
public virtual IList<User> Users { get; set; }
public virtual string Name { get; set; }
}
Il existe deux conventions qui sont appliquées:
public class MyForeignKeyConvention : ForeignKeyConvention
{
protected override string GetKeyName(Member property, Type type)
{
return property == null ? type.Name + "Id" : property.Name + "Id";
}
}
public class MyManyToManyConvention : IHasManyToManyConvention
{
public void Apply(IManyToManyCollectionInstance instance)
{
var firstName = instance.EntityType.Name;
var secondName = instance.ChildType.Name;
if (StringComparer.OrdinalIgnoreCase.Compare(firstName, secondName) > 0)
{
instance.Table(string.Format("{0}{1}", secondName, firstName));
instance.Inverse();
}
else
{
instance.Table(string.Format("{0}{1}", firstName, secondName));
instance.Not.Inverse();
}
instance.Cascade.All();
}
}
Quand j'exporte les correspondances aux fichiers, j'obtenir l'extrait suivant dans la définition de l'utilisateur comme par exemple:
<id name="Id" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<column name="Id" />
<generator class="identity" />
</id>
<bag cascade="all" inverse="true" name="Roles" table="RoleUser">
<key>
<column name="UserId" />
<column name="UserId" />
</key>
<many-to-many class="Security.Role, Contracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null">
<column name="RoleId" />
</many-to-many>
</bag>
<property name="UserName" type="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<column name="UserName" />
</property>
La UserId colonne en double dans la clé ne semble pas correct pour moi. Je ne suis pas sûr de ce que j'ai fait de mal. Merci pour l'aide.
schemaexport génère-t-il le bon schéma? vous pouvez exporter le ddl dans un fichier à la place du db – Firo
L'extrait d'exportation de schéma a été généré par la méthode ExportTo (dossier). Que voulez-vous dire? –
vous avez publié les mappings générés, mais je voudrais voir le nouveau SchemExport (config) .Execute (nouveau StreamWriter ("somefile.txt"). WriteLine, faux, nul, faux) ' – Firo