Я шел через ранние этапы урока на YouTube http://www.youtube.com/watch?v=WwmUFTWEh6YASP MVC Блог База данных не создает идентификационный номер
public ActionResult Update(int? id, string title, string body, DateTime dateTime, string tags)
{
if (!IsAdmin)
{
return RedirectToAction("Index");
}
Post post = GetPost(id);
post.Title = title;
post.Body = body;
post.DateTime = dateTime;
post.Tags.Clear();
tags = tags ?? string.Empty;
string[] tagNames = tags.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
foreach (string tagName in tagNames)
{
post.Tags.Add(GetTag(tagName));
}
if (!id.HasValue)
{
model.AddToPosts(post);
}
model.SaveChanges();
return RedirectToAction("Details", new { id = post.ID });
}
public ActionResult Edit(int? id)
{
Post post = GetPost(id);
StringBuilder tagList = new StringBuilder();
foreach (Tag tag in post.Tags)
{
tagList.AppendFormat("{0} ", tag.Name);
}
ViewBag.Tags = tagList.ToString();
return View(post);
}
private Tag GetTag(string tagName)
{
return model.Tags.Where(x => x.Name == tagName).FirstOrDefault() ?? new Tag() { Name = tagName };
}
private Post GetPost(int? id)
{
return id.HasValue ? model.Posts.Where(x => x.ID == id).First() : new Post() { ID = -1 };
}
Я получаю сообщение об ошибке ASPX «Невозможно вставить явное значение для столбца идентификаторов в таблице«сообщений ', когда для параметра IDENTITY_INSERT установлено значение OFF. " Я знаю, это потому, что он пытается вставить идентификатор -1, когда база данных обновляется, и я этого не хочу. Должен ли он просто создать новый идентификатор, если im пройдет в -1? Вот что происходит в учебнике. Я не знаю, почему моя действует по-другому.
==================================================================================================================================== ============== EDIT База данных была создана с использованием конструктора баз данных не через код, я просмотрел код, хотя и не вижу никакого объекта Autogenerated property или IsDbGenerated, где на земле я бы вставить это?
// <summary>
/// No Metadata Documentation available.
/// </summary>
[EdmEntityTypeAttribute(NamespaceName="CollateralSystems.Models", Name="Post")]
[Serializable()]
[DataContractAttribute(IsReference=true)]
public partial class Post : EntityObject
{
#region Factory Method
/// <summary>
/// Create a new Post object.
/// </summary>
/// <param name="id">Initial value of the ID property.</param>
/// <param name="title">Initial value of the Title property.</param>
/// <param name="dateTime">Initial value of the DateTime property.</param>
/// <param name="body">Initial value of the Body property.</param>
public static Post CreatePost(global::System.Int32 id, global::System.String title, global::System.DateTime dateTime, global::System.String body)
{
Post post = new Post();
post.ID = id;
post.Title = title;
post.DateTime = dateTime;
post.Body = body;
return post;
}
#endregion
#region Primitive Properties
/// <summary>
/// No Metadata Documentation available.
/// </summary>
///
[EdmScalarPropertyAttribute(EntityKeyProperty=true, IsNullable=false)]
[DataMemberAttribute()]
public global::System.Int32 ID
{
get
{
return _ID;
}
set
{
if (_ID != value)
{
OnIDChanging(value);
ReportPropertyChanging("ID");
_ID = StructuralObject.SetValidValue(value);
ReportPropertyChanged("ID");
OnIDChanged();
}
}
}
private global::System.Int32 _ID;
partial void OnIDChanging(global::System.Int32 value);
partial void OnIDChanged();
Что вы используете для запросов БД? Entity Framework? – Andrei
Возможно, учебник использует '[DatabaseGenerated (DatabaseGeneratedOption.Identity)]' значение ID. – anaximander
@anaximander, наоборот - DB имеет автоинкрементный столбец, в то время как EF ничего не знает об этом и генерирует код для вставки ID – Andrei