【问题标题】:Passing object from my Controller action method to my Repository method将对象从我的控制器操作方法传递到我的存储库方法
【发布时间】:2014-12-23 17:43:19
【问题描述】:

我正在开发一个 asp.net mvc 5 web 项目,我创建了一个存储库模型类来与我的数据库交互,并且我正在从我的操作方法调用我的存储库。例如,在我的 Post Edit 操作方法中,我有以下代码:-

Repository repository = new Repository();
[HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Edit(SecurityRole Role)
        {

            try
            {
                if (ModelState.IsValid)
                {

                   repository.InsertOrUpdateRole(Role);

                    repository.Save();


                    return RedirectToAction("Index");
                }
            }}

这里是存储库模型类:-

 public class Repository
{
private TEntities tms = new TEntities();
public void InsertOrUpdateRole(SecurityRole role)
        {
            role.Name = role.Name.Trim();
            if (role.SecurityRoleID == default(int))
            {
                // New entity
               //Code goes here
            else
            {

t.Entry(role).State = EntityState.Modified;

            }
        }

所以我的问题是,当我将对象从我的操作方法传递到我的存储库时,Entity Framework 将如何处理该对象;它会在存储库中创建另一个副本,还是会跟踪同一个对象?如果实体框架将在会话中的 action 方法和存储库方法中处理同一个对象,那么实体框架如何持续跟踪该对象?

第二个问题,最好的方法是什么;将整个对象从操作方法传递到存储库(正如我目前正在做的那样),或者仅传递对象 id,并在存储库模型中再次检索对象,如下所示:-

repository.InsertOrUpdateRole(Role.RoleID);

在存储库中

public void InsertOrUpdateRole(int id)
{
var SecurityRole = t.SecurityRoles.SingleOrDefault(a => a.SecurityRoleID == role.SecurityRoleID);
}

【问题讨论】:

    标签: c# asp.net-mvc entity-framework asp.net-mvc-5 entity-framework-5


    【解决方案1】:

    在 C# 中,对象是通过引用传递的。当您在ActionResult 中保存一个新的role 时,您会注意到它在InsertOrUpdateRole 调用之后得到了一个Id。一旦将某些内容附加到上下文,EF 就会开始跟踪更改。所以你的第一种方法效果很好(我也使用它)。确保将模型传递给 InsertOrUpdateRole 函数并设置其所有值,EF 将覆盖整个记录,因此如果您忘记视图中的属性,它将成为数据库中的空值。如果您只想更新模型的一些属性,请使用第二种方法。

    【讨论】:

    • 所以在这种情况下,角色对象在从存储库或操作方法访问时是相同的吗?这是正确的吗?
    • 如果你将角色对象从操作方法传递到存储库,它确实是一样的。
    • 所以如果我修改存储库中的角色属性之一,我可以在操作方法中使用它?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-16
    • 1970-01-01
    • 1970-01-01
    • 2019-01-17
    相关资源
    最近更新 更多