LINQ to SQL no actualización de los registros de base de datos en la aplicación MVC 2
-
02-10-2019 - |
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.
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.