4

データベースからレコードを更新および削除する方法を知る必要があります。レコードを追加する方法は知っていますが、データベースのレコードを更新および削除できません。

namespace Ex.Models
{
    using System;
    using System.Data.Entity;
    using System.Data.Entity.Infrastructure;

    public partial class MyEntities : DbContext
    {
        public MyEntities()
            : base("name= MyEntities")
        {
        }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            throw new UnintentionalCodeFirstException();
        }

        public DbSet<Friend> Friend { get; set; }
    }
}

--

コントローラー

// POST: /Home/Edit/5
[HttpPost]
public ActionResult Edit(int id, Friend f)
{
    try
    {
        // TODO: Add update logic here
        myEntities.Friend.Attach(f);// Doesn't work.. How to update ?
        myEntities.SaveChanges();
        return RedirectToAction("Index");
    }
    catch
    {
        return View();
    }
}

データベースにレコードを追加するには、次のコードを使用しました。出来た;

myEntities.Friend.Add(f);
myEntities.SaveChanges();
return RedirectToAction("Index");

アップデート

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<Exp.Models.Friend>" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    Delete
</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

<h2>Delete</h2>

<h3>Are you sure you want to delete?</h3>
<fieldset>
    <legend>Friend</legend>

    <div class="display-label">Name</div>
    <div class="display-field">
        <%: Html.DisplayFor(model => model.Name) %>
    </div>


</fieldset>
<% using (Html.BeginForm()) { %>
    <p>
        <input type="submit" value="Delete" /> |
        <%: Html.ActionLink("Back to List", "Index") %>
    </p>
<% } %>

</asp:Content>
4

6 に答える 6

9

消去

myEntities.Friend.Remove(f);
myEntities.SaveChanges();

アップデート

Friend f = myEntities.Friend.FirstOrDefault(x => x.Id = MyId);
f.Name = NewName;
myEntities.SaveChanges();
于 2013-01-09T08:21:51.987 に答える
2

更新するには、addと同じですが、がありません.Friend.Add(f)。次のようにアイテムをロードします。

var friendEntity = myEntites.Friend.SingleOrDefault(f => f.Id == id);
friendEntity.Field1 = f.Field1;
...
myEntities.SaveChanges();

.Add(f)削除するには、、の反対を使用し.Removeます。

于 2013-01-09T08:18:54.427 に答える
0

概念の証明のみ Controller.UpdateModel は正しく動作しません。

フルクラスはこちら https://stackoverflow.com/a/39452785/1071165

const string PK = "Id";
protected Models.Entities con;
protected System.Data.Entity.DbSet<T> model;

[HttpPost]
public virtual ActionResult AddEdit(T item)
{
    TestUpdate(item);

    con.SaveChanges();

    return RedirectToAction("Index");
}

[HttpGet]
public virtual ActionResult Remove(string id)
{
    int nId = 0;
    int.TryParse(id, out nId);
    if (nId != 0)
    {
        var item = model.Find(nId);
        con.Entry(item).State = System.Data.Entity.EntityState.Deleted;
        con.SaveChanges();
    }
    return Redirect(Request.UrlReferrer.ToString());
}

private void TestUpdate(object item)
{
    var props = item.GetType().GetProperties();
    foreach (var prop in props)
    {
        object value = prop.GetValue(item);
        if (prop.PropertyType.IsInterface && value != null)
        {
            foreach (var iItem in (System.Collections.IEnumerable)value)
            {
                TestUpdate(iItem);
            }
        }
    }

    int id = (int)item.GetType().GetProperty(PK).GetValue(item);
    if (id == 0)
    {
        con.Entry(item).State = System.Data.Entity.EntityState.Added;
    }
    else
    {
        con.Entry(item).State = System.Data.Entity.EntityState.Modified;
    }

}
于 2016-09-12T14:48:59.293 に答える
0

アップデート:

      if (ModelState.IsValid && f != null)
        {
            myEntities.Friend.Attach(f);
     var upd = (from c in myEntities.Friend
                       where c.Id == f.Id
                       select c).FirstOrDefault();
    upd.Data1=f.Data1;
    ...
    ....
            myEntities.ObjectStateManager.ChangeObjectState(f, EntityState.Modified);
            myEntities.SaveChanges();
        }

消去:

   if (ModelState.IsValid && f != null)
        {
            var del = (from c in myEntities.Friend
                       where c.Id == f.Id
                       select c).FirstOrDefault();

            myEntities.Friend.DeleteObject(del);
            myEntities.SaveChanges();
        }
于 2013-01-09T08:47:46.827 に答える