Как написать обнуляемые свойства для класса определения таблицы EF6 с C #? - PullRequest
0 голосов
/ 20 марта 2019

Я хочу написать класс C # для описания таблицы базы данных с отношением к себе, позже для использования с Entity Framework 6.

Entity relation diagram of Contacts table

У меня есть следующий код C # для реализации показанной выше таблицы:

public class Contact
{
    /// <summary>
    /// Unique identifier of the contact.
    /// </summary>
    public string ContactId { get; set; }

    /// <summary>
    /// Gets or sets the name of the contact.
    /// </summary>
    public string Name { get; set; }

    /// <summary>
    /// Defines whether the contact belongs to another contact (e.g.,
    /// parents, organization).
    /// </summary>
    public virtual Contact BelongsToContact { get; set; }
}

Теперь я хочу пометить BelongsToContact как Nullable, так как это свойство не требуется.Могут быть некоторые контакты, которые принадлежат другим контактам, но есть также контакты, которые вообще не принадлежат ни одному контакту.Поле должно быть обнуляемым.

Чтобы пометить BelongsToContact как обнуляемое, я изменил свойство с типа Contact на Contact? (это более короткая форма Nullable<Contact>).

public virtual Contact? BelongsToContact { get; set; }

Теперь я получаю следующую ошибку:

Ошибка CS0453 Тип «Контакт» должен иметь тип значения, не допускающий значения NULL, чтобы использовать его в качестве параметра «T» в универсальном типе.или метод 'Nullable'

Итак: Как правильно пометить свойство как необязательное / обнуляемое? Наиболее общий способ (без разметки Entity Framework 6, когда это возможно).

1 Ответ

1 голос
/ 21 марта 2019

Вы должны сделать что-то вроде этого

    public class Contact
    {
        /// <summary>
        /// Unique identifier of the contact.
        /// </summary>
        public string ContactId { get; set; }

        /// <summary>
        /// Gets or sets the name of the contact.
        /// </summary>
        public string Name { get; set; }

        /// <summary>
        /// Defines whether the contact belongs to another contact (e.g.,
        /// parents, organization).
        /// </summary>
        [ForeignKey("BelongsToContact")]
        public int? BelongsToContactId { get; set; }
        public virtual Contact BelongsToContact { get; set; }
    }
...