我使用的是自动映射域模型(简化版):
public class AppUser : Entity
{
[Required]
public virtual string NickName { get; set; }
[Required]
[DataType(DataType.Password)]
public virtual string PassKey { get; set; }
[Required]
[DataType(DataType.EmailAddress)]
public virtual string EmailAddress { get; set; }
public virtual IList<PreferencesDescription> PreferencesDescriptions { get; set; }
}
public class PreferencesDescription : Entity
{
public virtual AppUser AppUser { get; set; }
public virtual string Content{ get; set; }
}
PreferencesDescriptions集合被映射为IList,因此是一个索引集合(当我需要标准的无索引集合时,我使用ICollection)。
事实上,流畅的nhibernate的automap工具将我的域模型映射为未编制索引的集合(因此SchemaExport生成的DDL中没有“position”属性)。
¿如何在不必覆盖这种情况的情况下实现它 - 我的意思是,我如何使得Fluent nhibernate的automap为IList制作总是索引的集合,而不是ICollection
答案 0 :(得分:1)
IList不是索引集合。您可以通过索引访问IList中的元素,但它们的位置不会存储在数据库中。您不能通过索引访问ICollection(不使用扩展方法),但它确实有一个AddAt方法,可以在索引处将对象添加到集合中。
如果您需要在集合中存储对象位置,请将其映射为等同于IDictionary的map。我假设automap将使用map作为IDictionary集合类型。