gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 19:46:49 28 4
gpt4 key购买 nike

我正致力于在 Orchard CMS 中构建自定义模块,并且我有以下 Controller 操作:

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

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

异常(exception)情况是方法 get_Id 应该是“公共(public)/ protected 虚拟”或“ protected 内部虚拟”。

我可以将虚拟添加到属性中,但我想避免让 NHibernate 参与查看此对象,这是不必要的。

我的问题是,如何添加模型、在 View 中访问该模型并阻止 Orchard 将其视为 PartRecord?实际上,我在独立于 Orchard DB 的单独存储库中使用该模型。

编辑:附加信息

_repository 是一个IDbRepository,指向我自己的数据库实例MyModel 是我的数据的 POCO。我试图避免将 virtual 放在 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。

最佳答案

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

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

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

关于c# - Orchard 自定义模块 - NHibernate 选择的模型 - 需要虚拟属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7840250/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com