相关疑难解决方法(0)

EntityKey和ApplyPropertyChanges()

我需要设置一个EntityObject的EntityKey.我知道它的类型和它的id值.我不想不必要地查询数据库.

这有效......

//
// POST: /Department/Edit/5

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(Guid id, Department Model)
{
    Model.EntityKey = (from Department d in db.Department
                       where d.Id == id
                       select d).FirstOrDefault().EntityKey;
    db.ApplyPropertyChanges(Model.EntityKey.EntitySetName, Model);
    db.SaveChanges();
    return RedirectToAction("Index");
}
Run Code Online (Sandbox Code Playgroud)

这失败了......

//
// POST: /Department/Edit/5

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(Guid id, Department Model)
{
    String EntitySetName = db.DefaultContainerName + "." + Model.GetType().Name;
    Model.EntityKey = new System.Data.EntityKey(EntitySetName, "Id", Model.Id);
    db.ApplyPropertyChanges(Model.EntityKey.EntitySetName, Model);
    db.SaveChanges();
    return RedirectToAction("Index");
}
Run Code Online (Sandbox Code Playgroud)

ApplyPropertyChanges()线路出现故障与此异常:

ObjectStateManager不包含ObjectStateEntry,其中引用了"Sample.Models.Department"类型的对象.

两个EntityKeys是平等的.为什么第二块代码失败?我该如何解决?

.net c# asp.net-mvc entity-framework

6
推荐指数
1
解决办法
1万
查看次数

ASP.NET MVC与EF 4.1导航属性

经过几天的学习EF了解(有点......)它是如何工作的,我终于意识到我可能有一个大问题.

想象一下,我有两个实体:PaisUF.他们之间的关系是Pais (0..1) ... (*) UF.截图:http://i.imgur.com/rSOFU.jpg.

说,考虑到我有一个控制器被调用UFController,它有动作EditCreate,这很好.我的视图使用EditorFor帮助器(或类似的)作为输入,因此当我提交表单时,控制器将接收一个UF填充了所有数据的对象(自动),并引用几乎为空的数据 Pais.我的视图代码(部分代码):

@* UF attributes *@
@Html.EditorFor(m => m.Sigla)
@Html.EditorFor(m => m.Descricao)
@Html.EditorFor(m => m.CodigoIBGE)
@Html.EditorFor(m => m.CodigoGIA)
@* Pais primary key ("ID") *@
@Html.EditorFor(m => m.Pais.Codigo) // Pais id
Run Code Online (Sandbox Code Playgroud)

控制器Edit动作代码:

[HttpPost]
public ActionResult Edit(UF uf)
{
    try
    {
        if (ModelState.IsValid)
        {
            db.UFs.Attach(uf);
            db.ObjectStateManager.ChangeObjectState(uf, EntityState.Modified);
            db.SaveChanges();

            return this.ClosePage(); // An …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework-4.1 asp.net-mvc-3

5
推荐指数
1
解决办法
1912
查看次数

带有实体框架的强类型ASP.NET MVC

此代码无法实际保存任何更改:

//
// POST: /SomeType/Edit/5

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(Guid id, SomeType Model)
{
    db.AttachTo(Model.GetType().Name, Model);
    db.ApplyPropertyChanges(Model.EntityKey.EntitySetName, Model);
    db.SaveChanges();
    return RedirectToAction("Index");
}
Run Code Online (Sandbox Code Playgroud)

ASP.NET MVC将对象Model创建为Department类型EntityObject,其EntityState值为Detached.

使用AttachTo方法后,其EntityState变为Unchanged.

附加对象的MSDN(实体框架)

对象以Unchanged状态附加到对象上下文.

由于其Unchanged状态,ApplyPropertyChanges方法不执行任何操作.

我希望它具有状态修改.

关于EntityState枚举的MSDN

已分离
对象存在但对象服务未对其进行跟踪.在创建实体并将其添加到对象上下文之前,实体立即处于此状态.通过调用Detach方法或使用NoTrackingMergeOption加载实体后,实体也处于此状态.

未更改
对象未被修改,因为它已加载到上下文中或自上次调用SaveChanges方法以来.

已修改
对象已更改,但尚未调用SaveChanges方法.

我无法将EntityObject的EntityState属性显式设置为Modified.它是只读的.

使用EntityObjects的强类型MVC控制器是不是不可能?

.net c# asp.net asp.net-mvc entity-framework

2
推荐指数
1
解决办法
4910
查看次数