Как установить отношение внешнего ключа вручную в LINQ To SQL - PullRequest
2 голосов
/ 13 августа 2010

Я работал над книгой Pro ASP.NET MVC 2 Framework Стивена Сандерсона. До сих пор это был феноменальный ... только когда я думаю, что знаю приличное количество, я нахожу книгу, которая показывает мне, как мало я знаю.

Одна из вещей, о которых я мало знаю, это как использовать LINQtoSQL. В книгах Стивена главы 4-6 создают очень милую маленькую корзину. Я прошел учебник и получил все работает. Теперь я хочу изменить корзину, чтобы использовать таблицу категорий вместо сохранения имени категории в качестве varchar в таблице Product.

Вот объект таблицы Product с моими изменениями, чтобы CategoryID имел отношение внешнего ключа к таблице категорий.

    [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 Ответ

1 голос
/ 13 августа 2010

Ваш класс "Категория" менее заметен, чем "Продукт".«Продукт» имеет публичную собственность «Категория», которая является публичной.Это «Непоследовательная доступность».

Вы должны объявить свой класс «Категория» общедоступным как «Продукт»

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