1

我正在使用 Entity Framework 5 中的数据库优先模型,当我尝试添加行时,出现以下错误:“在程序集中找不到视图或可以为表 'ui_renewals' 生成视图。”

该表存在于我的 EDMX 中,并且模板生成了一个 ui_renewals 类。我已经从 EDMX 中删除了该表,并使用“从数据库更新模型”选项再次添加它,我得到了同样的错误。为它创建一个单独的连接可以解决这个问题,但这似乎是一个不太理想的解决方案(更像是一个杂物),更不用说它使将来更难以维护。

关于如何解决这个问题的任何想法,以便我可以在 ui_renewals 中添加或更新(我都尝试过)一行?

这是我目前正在使用的代码 - 之前唯一的区别是使用 db 作为 DBContext 而不是 ui (是的,收据拼写错误 - 必须喜欢遗留的东西)

        [HttpPost]
    public bool UpdateTeacher(string login_id, string password, UIRenewal data)
    {
        if (ModelState.IsValid)
        {
            // map from UIRenewal VM to ui_renewal
            ui_renewals Renewal = Mapper.Map<UIRenewal, ui_renewals>(data);
            // check to see if this is a new entry or not
            var tmp = ui.ui_renewals.Find(Renewal.reciept);
            if (tmp == null)
                ui.ui_renewals.Add(Renewal);
            else
            {
                // mark as modified
                db.Entry(Renewal).State = EntityState.Modified;
            }
            // save it
            try
            {
                ui.SaveChanges();
            }
            catch (DBConcurrencyException)
            {
                return false;
            }
            return true;
        }
        return false;
    }

我应该提到我在模型中确实有一个视图(v_recent_license)。

4

1 回答 1

3

我知道这是一个非常古老的问题,但是由于我还没有找到任何其他类似的主题,所以我会发布我的答案。

我抛出了同样的异常。我发现,在尝试优化 EF 性能失败时,按照此处找到的建议,我在 EF .edmx 代码隐藏中留下了这段代码:

<EntityContainerMapping StorageEntityContainer="XXXModelStoreContainer" CdmEntityContainer="YYYEntities" GenerateUpdateViews="false">  

我删除了GenerateUpdateViews="false"字符串,一切都恢复了。

(在我看来,异常消息有点误导)。

于 2013-11-26T08:15:34.550 回答