Я использую Entity Framework и JQuery для обновления значений в столбце таблицы SQL с битным типом данных. Это делается путем считывания значений в таблицу html, а затем с помощью кнопки, которая изменит значение бита для каждой строки.Ошибка базы данных базы данных - Entity Framework
Здесь вы можете увидеть HTML таблицу:
<table id="categoryList" class="table">
<thead>
<tr>
<th>Category ID</th>
<th>Category Name</th>
</tr>
</thead>
<tbody>
@foreach (var item in Model.Categories)
{
<tr>
<td>@item.id</td>
<td>@item.name</td>
<td>
<button class="btn btn-success categoryEnabled" data-id="@item.id">Enabled</button>
</td>
</tr>
}
</tbody>
</table>
Тогда здесь скрипт я использую, чтобы начать действие на клик:
$(".categoryEnabled").on("click", function() {
$(this).hide();
$(this).next().show();
if (!e) var e = window.event;
e.cancelBubble = true;
if (e.stopPropagation) {
e.stopPropagation();
}
DisableRow($(this).data('id'));
});
function DisableRow(id) {
$.post('@Url.Action("DisableRow", "Category")', { "Id": id }, function() {
alert('Row Disabled!');
}).fail(function() {
alert('Error disabling row!');
});
}
Это то связано с действием контроллера, который должен изменить значение бита состояния для выбранной строки и обновить:
public void DisableRow(int id)
{
var connection = new CategoryDBEntities();
var record = connection.Categories.Find(id);
if (record == null) return;
record.state = StatesTypes.Disabled;
connection.SaveChanges();
}
Категория объекта для r правочник:
namespace Project.Models
{
using System;
using System.Collections.Generic;
public enum StatesTypes
{
Disabled = 0,
Enabled = 1
}
public partial class Category
{
public int id { get; set; }
public string name { get; set; }
public StatesTypes state { get; set; }
}
}
DbContext:
namespace Project.Models
{
using System;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
public partial class CategoryDBEntities : DbContext
{
public QualityDBEntities()
: base("name=CategoryDBEntities")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
public DbSet<Category> Categories { get; set; }
}
}
Выход из Diagnostics отладки:
SELECT TOP (2)
[Extent1].[id] AS [id],
[Extent1].[name] AS [name]
FROM [dbo].[Category] AS [Extent1]
WHERE [Extent1].[id] = @p0
-- p0: '5' (Type = Int32)
Этот вопрос о том, что record.state изменяется для инвалидов (0), но значение бита в базе данных не изменяется. Я должен что-то упустить. Спасибо за вашу помощь!
Вы говорите бит, но перечисления обычно отображаются в целые числа. Можете ли вы отправить сопоставление? Кроме того, как вы создали БД? Попробуйте изменить бит на целое число – bubi
Db уже создан. Я просто добавил столбец состояния в существующую таблицу. Я попытаюсь изменить бит на int. Если бы я захотел сохранить его, я бы изменил перечисление? – cfly24
Добавьте следующий код после строки, в которой вы добавили 'CategoryDBEntities':' connection.Database.Log = s => Debug.WriteLine (s); '. Это выведет SQL, который генерирует EF, когда вы вызываете 'SaveChanges()'. Что ты видишь? – sstan