在此示例代码中,根据所有其他源设置变量都是正确的,但是方法中收到的用户对象始终为null。
我做了什么:
这是代码首先来自后端然后是前端
public void DeleteUser(User user)
{
using (EFEntity context = new EFEntity())
{
context.User.Attach(user);
context.User.Remove(user);
context.SaveChanges();
Response.Redirect("~/Home/someView");
}
}
行动链接前端:
foreach (User user in Model.userList)
{
<tr>
<td>
@{
number = number + 1;
}
@number
</td>
<td>@user.Gid</td>
<td>@user.Name</td>
<td>@user.Email</td>
<td>@user.Permissions.Perm</td>
<td>@user.LastUpdated</td>
<td>
@Html.ActionLink("Delete", "DeleteUser", "Service", user, new { @class = "btn btn-danger" })
</td>
</tr>
}
答案 0 :(得分:0)
我认为问题出来了,有点奇怪,修复起来并不难。
检查用户对象&#39;更接近并查看浏览器中的源代码,您可以在对象上看到某种字符串,其中包含一堆数字以及&#34;动态代理&#34;。
通过进一步研究,我了解到对象始终为null的原因是因为对象是使用动态代理选项生成的。出于某种原因,这已经以某种方式启用了,只有这个特定的EF模型。
修复方法是在实体框架中全局禁用动态代理。
怎么做:
转到您的Model.edmx - &gt; Model.Context.tt - &gt; Model.Context.cs
她将要添加该行&#34; Configuration.ProxyCreationEnabled = false;&#34;在作为实体模型的公共方法中。
之前的代码:
public partial class EFEntity: DbContext
{
public EFEntity()
: base("name=EFEntity")
{
}
......
}
代码之后:
public partial class EFEntity: DbContext
{
public EFEntity()
: base("name=EFEntity")
{
Configuration.ProxyCreationEnabled = false;
}
......
}
这应该全局禁用代理创建,并应修复此特定问题。
希望它可以帮助某些人,我已经很难找到错误的日子