Orchard自定义模块 - 由NHibernate选择的模型 - 需要虚拟属性

时间:2011-10-20 18:13:31

标签: c# asp.net-mvc-3 nhibernate orchardcms

我正在努力在Orchard CMS中构建自定义模块,我有以下控制器操作:

public ActionResult Inventory()
{
   var models = _repository.Get<MyModel>();
   return View(new MyViewModel() { MyModels = models.ToList() });
}

现在,当Orchard构建它时,会发生异常,因为NHibernate已经选择了MyModel,因为它被视为PartRecord,我不希望它出现。

例外是方法get_Id应该是'public / protected virtual'或'protected internal virtual'。

我可以在属性中添加虚拟,但我想避免NHibernate在查看此对象时有任何部分,这是不必要的。

我的问题是,如何添加模型,在视图中访问该模型并禁止Orchard将其视为PartRecord?实际上,我将该模型用于与Orchard DB分开的单独存储库中。

编辑:附加信息

_repository是一个IDbRepository,指向我自己的数据库实例 MyModel是我数据的POCO。我正在尝试避免将虚拟放在MyModel中的属性上,我将它们放在这里,以说明我试图避免它们的位置。

public interface IDbRepository : IDependency
{
    T Find<T>(long id) where T : class, IActiveRecord;
    bool Update<T>(T record) where T : class, IActiveRecord;
    bool Remove<T>(T record) where T : class, IActiveRecord;
}

public class MyModel : IActiveRecord
{
    [Key]
    public virtual long Id { get; set; }
    public virtual int SupplierProductId { get; set; }
    public virtual int SupplierId { get; set; }
    public virtual int ProductId { get; set; }
}

除此之外,我的模块还有一个我创建的设置部分,它确实存储在Orchard DB中,并在站点设置中进行了编辑。我正在使用一个处理程序来控制它。但是,我已经尝试删除处理程序和其他一些东西以防止Orchard将我的对象带入NHibernate。

1 个答案:

答案 0 :(得分:8)

Orchard自动映射配置假定在满足以下条件时将映射任何类:

  • 命名空间以“.Models”或“.Records”
  • 结尾
  • 有一个Id属性,带有虚拟访问者
  • 这个班既不是封闭的也不是抽象的
  • 该类未实现IContent或继承自ContentPartRecord

因此,如果您阻止任何这些标准成立,那么您应该是好的。例如,在不以.Models.Records结尾的命名空间中定义类应该就足够了。