LINQ to SQL с Lazy Загрузка классов карты правильно - PullRequest
1 голос
/ 22 апреля 2011

это первый раз, когда я делаю это, когда я хочу добавить новый элемент в БД, это не удается.

Как установить свойство ArticleCategoryId в классе статьи для ссылки на категорию статьи в статье, так как в данный момент она равна нулю и не содержит никакого значения? Мои занятия следующие:

Класс для статей:

[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();
    }
}

Ответы [ 2 ]

0 голосов
/ 22 апреля 2011

найдено решение, благодаря Стивену Сандерсону

[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; }
}
0 голосов
/ 22 апреля 2011

Я столкнулся с проблемой сопоставления Linq2SQL, когда он не обновляется при добавлении новых столбцов в базу данных и поэтому не может быть выполнен.

Поэтому мне нужно будет удалить файл .edmx и повторно добавлять его каждый раз, когда я вносю изменения в базу данных.

Этого не происходит с ADO.NET Entity Framework, поэтому попробуйте, если можете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...