Pregunta

El uso de MVC 2 He estado tratando de hacer de este proyecto una tienda de discos. La generación de trabajo registros, pero su actualización no lo hace. No hay excepciones son arrojados tampoco.

Me examinó getchangeset () justo antes de SubmitChanges () muestra todos ceros.

Gracias por su lectura y que ayuda:)

La vista Editar:

<% using (Html.BeginForm("Edit", "Song")) { %>
    <fieldset>          
            <%: Html.HiddenFor(model => model.SongID) %>
            <%: Html.HiddenFor(model => model.DownloadCount) %>
            <%: Html.HiddenFor(model => model.Rating) %>
            <%: Html.HiddenFor(model => model.TagMapID) %>

        <div class="editor-label">
            <%= Html.LabelFor(model => model.AlbumID) %>
        </div>
        <div class="editor-field">
            <%= Html.DropDownListFor(model => model.AlbumID, DataHelper.getAlbumList(Model.AlbumID)) %>
            <%= Html.ValidationMessageFor(model => model.AlbumID) %>
        </div>

        <div class="editor-label">
            <%= Html.LabelFor(model => model.FullName) %>
        </div>
        <div class="editor-field">
            <%= Html.TextBoxFor(model => model.FullName)%>
            <%= Html.ValidationMessageFor(model => model.FullName) %>
and so on...

Editar función

public ActionResult Edit(int id)
    {
        try
        {
            var model = songRepository.Song.Single(rec => rec.SongID == id);

            return View(model);
        }
        catch (Exception anyEx)
        {
            throw anyEx;
            //return View("Error")
        }
    }

Editar función de post

[AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Edit(Song model)
    {
        try
        {
            if (ModelState.IsValid)
            {
                songRepository.SaveSong(model);
                TempData["adminmsg"] = "Song saved";
                return RedirectToAction("List", "Song");
            }
            else
            {
                TempData["adminmsg"] = "Song not saved";
                return View("Edit", model);
            }
        }
        catch (Exception anyEx)
        {
            throw anyEx;
        }
    }

Esto es lo que SaveSong () se ve como en SqlSongRepository

public void SaveSong(Song song)
    {
        if (song.SongID == 0)
        {
            songTable.InsertOnSubmit(song);
        }
        else
        {
            songTable.Attach(song);
            songTable.Context.Refresh(RefreshMode.KeepChanges, song);
        }

        songTable.Context.SubmitChanges();
    }

[cosas de contexto]

Este es el repositorio de contexto

public class ContextRepository : IContextRepository
{
    private string connStr;

    public ContextRepository(string connectionString)
    {
        this.connStr = connectionString;
    }

    public DataContext MasterContext
    {
        get { return new DataContext(connectionString); }
    }

    public string connectionString
    {
        get { return connStr; }
    }
}

En el controlador canción por ejemplo

public SongController(IContextRepository contextRepository)
    {
        this.contextRepository = contextRepository;
        MasterContext = this.contextRepository.MasterContext;
        DataHelper.InitContext(contextRepository);

        songRepository = new SqlSongRepository(contextRepository.connectionString);
    }

A continuación, el songRepository se utiliza como he publicado antes.

¿Fue útil?

Solución 2

Bueno, resolvió el problema. Cambiando

songTable.Context.Refresh(RefreshMode.KeepChanges, song);

a

songTable.Context.Refresh(RefreshMode.KeepCurrentValues, song);

resolvieron el problema.

No sé por qué, que sería genial si alguien puede explicar.

Gracias!

Otros consejos

¿por qué no tratar

public void SaveSong(Song song)
{
    if (song.SongID == 0)
    {
        context.songTable.InsertOnSubmit(song); //adds as song
    }
    else
    {
        var _song = (from s in context.songTable
                   where s.ID == song.id
                   select s).Single();
        _song = song; //updates existing song
    }

    context.songTable.SubmitChanges();
}

EDIT:

Aquí hay un ejemplo de cómo puedo actualizar mi mesa de Usuarios de mi repositorio (lo siento es en VB)

Public Class UserRepository : Implements IUserRepository
    Private dc As MyDBDataContext
    Public Sub New()
        dc = New MyDBDataContext
    End Sub

   Public Sub AddUser(ByVal openid As OpenID) Implements IUserRepository.AddUser
        Dim user As New User
        user.MemberSince = DateTime.Now
        openid.User = user

        dc.OpenIDs.InsertOnSubmit(openid)
    End Sub

    Public Sub UpdateUser(ByVal user As User) Implements IUserRepository.UpdateUser
        Dim _user = (From u In dc.Users
            Where u.ID = user.ID
            Select u).Single

        With _user
            .About = user.About
            .BirthDate = user.BirthDate
            .Email = user.Email
            .isClosed = user.isClosed
            .isProfileComplete = user.isProfileComplete
            .RegionID = user.RegionID
            .Reputation = user.Reputation
            .UserName = user.UserName
            .WebSite = user.WebSite
        End With

    End Sub
End Class

A continuación, en mi controlador decido si estoy añadiendo o actualización.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top