如何使用C#为EF6表定义类编写可为空的属性?

时间:2019-03-20 15:12:52

标签: c# database entity-framework entity-relationship entity-relationship-model

我想编写一个C#类来描述与其自身有关系的数据库表,以后再与Entity Framework 6一起使用。

Entity relation diagram of Contacts table

我具有以下C#代码来实现上述表格:

>>> board = [['']*3 for _ in range(3)]
>>> board[0][0] = "X"
>>> board
[['X', '', ''], ['', '', ''], ['', '', '']]

现在,我想将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>

现在,我收到以下错误消息:

  

错误CS0453类型“联系人”必须是不可为空的值类型,以便在通用类型或方法“可为空”中将其用作参数“ T”

因此:如何正确地将属性标记为可选/可为空?最通用的方式(可能时不使用Entity Framework 6标记)。

1 个答案:

答案 0 :(得分:1)

您应该这样做

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