LINQ to SQL的延迟加载映射类正确

本文关键字:映射 延迟加载 to SQL LINQ | 更新日期: 2023-09-27 17:52:52

这是我第一次这样做,当我想向数据库添加新项目时,它失败了。

如何在article类中设置articleecategoryid的属性来引用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();
    }
}

LINQ to SQL的延迟加载映射类正确

我遇到了Linq2SQL映射的问题,当您向数据库添加新列时,它不会更新,因此会失败。

所以我必须删除。edmx文件,并在任何时候对数据库进行更改时重新添加它。

这在ADO中不会发生。. NET实体框架,所以如果可以的话尝试一下。

找到了解决方案,感谢Steven Sanderson

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