#c# #.net #linq #linq-to-sql #asp.net-mvc-2
#c# #.net #linq #linq-to-sql #asp.net-mvc-2
Вопрос:
это первый раз, когда я делаю это, когда я хочу добавить новый элемент в базу данных, это не удается.
Как установить свойство ArticleCategoryId в классе article для ссылки на категорию article в article, поскольку на данный момент оно равно null и не содержит никакого значения? Мои классы следующие:
Класс для статей:
[Table(Name="Articles")]
public class Article
{
[HiddenInput(DisplayValue=false)]
[Column(IsPrimaryKey=true, IsDbGenerated=true,AutoSync=AutoSync.OnInsert)]
public int ArticleId { get; set; }
[Column(Name="ArticleCategoryId", AutoSync = AutoSync.Never)]
[Mapping.Association(IsForeignKey = true, Name = "FK_Articles_ArticleCategorys")]
public ArticleCategories ArticleCategory{get;set;}
[Column]
public string Label { get; set; }
[DataType(DataType.MultilineText)]
[Column]
public string Text { get; set; }
[DataType(DataType.DateTime)]
[Column]
public DateTime Created { get; set; }
}
Класс для категорий:
[Table(Name = "ArticleCategorys")]
public class ArticleCategories
{
[HiddenInput(DisplayValue = false)]
[Column(IsPrimaryKey = true, IsDbGenerated = true, AutoSync = AutoSync.OnInsert, Name="ArticleCategoryId")]
public int ArticleCategoryId { get; set; }
[Column]
public string Name { get; set; }
[Column]
public string Description { get; set; }
[DataType(DataType.DateTime)]
[Column] public DateTime Created { get; set; }
}
Моя ошибка:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create([Bind(Exclude = "ArticleId")] Article article)
{
try
{
ArticleCategories category = articleCategoriesRepository.ArticleCategories.FirstOrDefault(x => x.ArticleCategoryId == article.ArticleCategory.ArticleCategoryId);
article.ArticleCategory = category;
article.Created = DateTime.Now;
articlesRepository.SaveArticle(article);
ViewData["Message"] = NudaJeFuc.WebUI.Properties.Resources.text_ArticleSaved;
return RedirectToAction("Index");
}
catch
{
return view();
}
}
Ответ №1:
Я столкнулся с проблемой с сопоставлением Linq2SQL, когда оно не обновляется при добавлении новых столбцов в базу данных и, следовательно, завершается сбоем.
Поэтому мне пришлось бы удалять файл .edmx и повторно добавлять его каждый раз, когда я вносил изменения в базу данных.
Этого не происходит с ADO.NET Entity Framework, так что попробуйте, если сможете.
Комментарии:
1. я вообще не использую файл edmx, я сам написал это отображение
Ответ №2:
найдено решение, благодаря Стивену Сандерсону
[Table(Name="Articles")]
public class Article
{
[HiddenInput(DisplayValue=false)]
[Column(IsPrimaryKey=true, IsDbGenerated=true,AutoSync=AutoSync.OnInsert)]
public int ArticleId { get; set; }
[Column]
internal int ArticleCategoryId { get; set; }
internal EntityRef<ArticleCategories> _ArticleCategoryId;
//[Column(AutoSync = AutoSync.OnInsert, Name = "ArticleCategoryId")]
[Association(ThisKey="ArticleCategoryId", Storage="_ArticleCategoryId")]
public ArticleCategories ArticleCategory
{
get
{
return _ArticleCategoryId.Entity;
}
set
{
ArticleCategoryId = value.ArticleCategoryId;
_ArticleCategoryId.Entity = value;
}
}
[Column]
public string Label { get; set; }
[DataType(DataType.MultilineText)]
[Column]
public string Text { get; set; }
[Required(ErrorMessage = "Musíte vybrat kategorii článku.")]
[DataType(DataType.DateTime)]
[Column]
public DateTime Created { get; set; }
}
Комментарии:
1. Почему Стивен Сандерсон? Пожалуйста, обратитесь к источнику.
2. Потому что у него был пример в книге, которая у меня есть. Хотя я и не осознавал, что решение есть. ASP.NET mvc2