Mapeo de la colección de cadenas con NHibernate

Tengo una clase de dominio con una propiedad IList que quiero asignar a una tabla con un único valor de datos (es decir, tiene una ID, una ID de clave externa para la tabla de entidad de dominio y una columna de datos varchar).

Sigo recibiendo el error:

Asociación hace referencia a la clase no asignada: System.String

¿Cómo puedo asignar una tabla a una colección de cadenas?

Me encontré con una situación similar; y encontré que sí es posible mapear una colección de cadenas. Tenga en cuenta que tendrá que asignar esas cadenas como objetos de valor.

Esto es lo que tengo:

 public class Chapter { private ISet _synonyms = new HashedSet(); public ReadOnlyCollection Synonyms { get { return new List(_synonyms).AsReadOnly(); } } } 

Cartografía:

       

A menos que esté equivocado, puedes hacer esto:

     

Las identidades son un IList

Puedes hacer esto con IUserType así:

 public class DelimitedList : IUserType { private const string delimiter = "|"; public new bool Equals(object x, object y) { return object.Equals(x, y); } public int GetHashCode(object x) { return x.GetHashCode(); } public object NullSafeGet(IDataReader rs, string[] names, object owner) { var r = rs[names[0]]; return r == DBNull.Value ? new List() : ((string)r).SplitAndTrim(new [] { delimiter }); } public void NullSafeSet(IDbCommand cmd, object value, int index) { object paramVal = DBNull.Value; if (value != null) { paramVal = ((IEnumerable)value).Join(delimiter); } var parameter = (IDataParameter)cmd.Parameters[index]; parameter.Value = paramVal; } public object DeepCopy(object value) { return value; } public object Replace(object original, object target, object owner) { return original; } public object Assemble(object cached, object owner) { return cached; } public object Disassemble(object value) { return value; } public SqlType[] SqlTypes { get { return new SqlType[] { new StringSqlType() }; } } public Type ReturnedType { get { return typeof(IList); } } public bool IsMutable { get { return false; } } } 

Luego defina la propiedad IList como type = “MyApp.DelimitedList, MyApp”.

NOTA: SplitAndTrim es una extensión de cadena con varias modificaciones que he creado. Aquí está el método central:

 public static IList SplitAndTrim(this string s, StringSplitOptions options, params string[] delimiters) { if (s == null) { return null; } var query = s.Split(delimiters, StringSplitOptions.None).Select(x => x.Trim()); if (options == StringSplitOptions.RemoveEmptyEntries) { query = query.Where(x => x.Trim() != string.Empty); } return query.ToList(); }