visual studio net framework example .net nhibernate

.net - studio - Mapeo de la colección de cadenas con NHibernate



nhibernate vs entity framework (3)

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>() : ((string)r).SplitAndTrim(new [] { delimiter }); } public void NullSafeSet(IDbCommand cmd, object value, int index) { object paramVal = DBNull.Value; if (value != null) { paramVal = ((IEnumerable<string>)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<string>); } } public bool IsMutable { get { return false; } } }

Luego defina la propiedad IList <cadena> 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<string> 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(); }

Tengo una clase de dominio con una propiedad IList<string> 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?


A menos que esté equivocado, puedes hacer esto:

<bag name="Identities" access="property"> <key column="accountId"/> <element column="identity" type="string"/> </bag>

Las identidades son un IList<string>


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<string> _synonyms = new HashedSet<string>(); public ReadOnlyCollection<string> Synonyms { get { return new List<string>(_synonyms).AsReadOnly(); } } }

Cartografía:

<class name="Chapter" table="Chapter"> <set name="Synonyms" table="ChapterSynonyms"> <key column="ChapterId" /> <element column="ChapterCode" type="string" /> </set> </class>