LINQ إلى SQL لا تحديث سجلات قاعدة البيانات في تطبيق MVC 2
-
02-10-2019 - |
سؤال
باستخدام MVC 2 ، كنت أحاول جعل مشروع متجر التسجيلات هذا. إنشاء السجلات العمل ولكن تحديثها لا. لا يتم إلقاء استثناءات أيضًا.
لقد فحصت getChangeset () مباشرة قبل Submitchanges () يظهر جميع الأصفار.
شكرا لقراءتك وأنت تساعد :)
عرض التحرير:
<% 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...
تحرير الوظيفة
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")
}
}
تحرير وظيفة ما بعد
[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;
}
}
هذا ما يبدو عليه SaveSong () في 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();
}
أشياء السياق
هذا هو مستودع السياق
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; }
}
}
في وحدة تحكم الأغنية على سبيل المثال
public SongController(IContextRepository contextRepository)
{
this.contextRepository = contextRepository;
MasterContext = this.contextRepository.MasterContext;
DataHelper.InitContext(contextRepository);
songRepository = new SqlSongRepository(contextRepository.connectionString);
}
ثم يتم استخدام songrepository كما نشرت من قبل.
المحلول 2
حسنا ، حل المشكلة. التغيير
songTable.Context.Refresh(RefreshMode.KeepChanges, song);
إلى
songTable.Context.Refresh(RefreshMode.KeepCurrentValues, song);
هل الحيلة.
لا أعرف لماذا ، سيكون من الرائع أن يشرح شخص ما.
شكرًا!
نصائح أخرى
لماذا لا تحاول
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();
}
تعديل:
إليك مثال على كيفية تحديث جدول المستخدمين الخاص بي من مستودعي (آسف إنه في 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
ثم في وحدة التحكم الخاصة بي ، قررت ما إذا كنت أضيف أو أقوم بالتحديث.
لا تنتمي إلى StackOverflow