2

我正在使用 razorengine 生成一些我认为这很简单的代码,但我遇到了一个异常,它以前工作得很好。

private FileItem Parse(string template, Model dataitem)
{
    _content = Razor.Parse(template, dataitem );
    // return current instance for method chaining ...
    return this;
}

dataitem只是一个包含 ef 实体的对象:

{System.Data.Entity.DynamicProxies.Table_600FE9F0407FBF4EABE3C512A1938F3D58ACD5ABD32691FF564D071856338EBB}

模板包含一个无意义的字符串:"(Some text)"

然而我得到了这个例外:

无法编译模板。命名空间“System.Data.Entity”中不存在类型或命名空间名称“DynamicProxies”(您是否缺少程序集引用?)。

我已经用 nuget 安装了 ef,所以我假设所有引用都在那里。我已经尝试过 ef5 和 ef6 相同的结果。我正在尝试这样做:

string template = "Hello @Model.Name! Welcome to Razor!";
string result = Razor.Parse(template, new { Name = "World" });
4

1 回答 1

2

简单的答案是关闭延迟加载。它将阻止 ef 将表数据包装在导致问题的代理对象中。但是,如果您有很多导航属性,它们也会自动停止加载。

第二个答案是在您的 linq 语句之后使用 ToList() 强制执行查询,该语句也删除了代理对象,然后将其作为数据传递给 razor。

于 2014-02-22T22:24:27.787 回答