流畅的NHibernate Automap不会将IList <t>集合视为索引</t>

时间:2009-10-03 18:26:03

标签: nhibernate fluent-nhibernate nhibernate-mapping

我使用的是自动映射域模型(简化版):

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

1 个答案:

答案 0 :(得分:1)

IList不是索引集合。您可以通过索引访问IList中的元素,但它们的位置不会存储在数据库中。您不能通过索引访问ICollection(不使用扩展方法),但它确实有一个AddAt方法,可以在索引处将对象添加到集合中。

如果您需要在集合中存储对象位置,请将其映射为等同于IDictionary的map。我假设automap将使用map作为IDictionary集合类型。