如何在LINQ To SQL中手动设置外键关系

时间:2010-08-12 21:00:00

标签: asp.net asp.net-mvc linq linq-to-sql asp.net-mvc-2

我一直在研究Steven Sanderson的Pro ASP.NET MVC 2 Framework一书。到目前为止它一直是典型的...当我认为我知道一个不错的数量时,我发现一本书向我展示了我知之甚少。

我不了解的一件事是如何使用LINQtoSQL。在史蒂文的书中,第4-6章创建了一个非常漂亮的小购物车。我仔细阅读了教程并完成了所有工作。现在我想修改购物车以使用Category表,而不是将类别名称存储为Product表中的varchar。

这是我的更改的Product表对象,它将CategoryID作为与Categories表的外键关系。

    [Table(Name="Products")]
    public class Product
    {
        [HiddenInput(DisplayValue=false)]
        [Column(IsPrimaryKey=true, IsDbGenerated=true, AutoSync=AutoSync.OnInsert)]
        public int ProductID { get; set; }

        [Required(ErrorMessage="Please enter a product name")]
        [Column] public string Name { get; set; }

        [Required(ErrorMessage="Please enter a description")]
        [DataType(DataType.MultilineText)]
        [Column] public string Description { get; set; }

        [Required]
        [Range(0.01, double.MaxValue, ErrorMessage="Please enter a positive price")]
        [Column] public decimal Price { get; set; }


        [Required(ErrorMessage="Please enter a category")]
        [Column] public int CategoryID { get; set; }

        internal EntityRef<Category> _category;
        [System.Data.Linq.Mapping.Association(ThisKey = "CategoryID", Storage = "_category")]
        public Category Category {
            get { return _category.Entity; }
            internal set { _category.Entity = value; CategoryID = value.CategoryID; }
        }


        [Column] public byte[] ImageData { get; set; }

        [ScaffoldColumn(false)]
        [Column] public string ImageMimeType { get; set; }

这是我的分类

    [Table(Name="Categories")]
    class Category
    {
        [Column(IsPrimaryKey=true, IsDbGenerated=true, AutoSync=AutoSync.OnInsert)]
        internal int CategoryID { get; set; }

        [Column]
        public int ParentCategoryID { get; set; }

        [Column]
        [Required]
        public string Name { get; set; }
    }

当我尝试构建此代码时,出现了一个我不理解的错误:

  

可访问性不一致:属性类型'SportsStore.Domain.Entities.Category'   比物业'SportsStore.Domain.Entities.Product.Category'

更难进入

这是什么意思/如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

您的课程“分类”与“产品”相比不那么明显。 “产品”具有公开的“公共财产”类别。这是“不一致的可访问性”。

您必须将您的类“类别”公开声明为“产品”