Linq to Sql Table 设计

Linq to Sql Table Design

我正在尝试使用 linq to sql 实现数据库连接。我做了一个 class User 和一个 class License 看起来像这样:

用户:

[Table(Name = "User")]
public class User {

    [Column(Name = "UserID", IsPrimaryKey = true, IsDbGenerated = true)]
    public int ID { get; set; }

    [Column(Name = "EMail", CanBeNull = false)]
    public string EMail { get; set; }

    [Column(Name = "Password", CanBeNull = false)]
    public string Password { get; set; }

    [Column(Name = "JoinedDate", CanBeNull = false)]
    public DateTime JoinedDate { get; set; }

    [Column(Name = "PaymentMethodID", CanBeNull = true)]
    public int PaymentMethodID { get; set; }

    [Column(Name = "Address", CanBeNull = false)]
    public string Address { get; set; }

    [Column(Name = "PostalCode", CanBeNull = false)]
    public string PostalCode { get; set; }

    [Column(Name = "Town", CanBeNull = false)]
    public string Town { get; set; }
}

许可证:

[Table(Name = "License")]
public class License {

    [Column(Name = "LicenseID", IsPrimaryKey = true)]
    public int LicenseID { get; set; }

    [Column(Name = "CPUID")]
    public string CPUID { get; set; }

    [Column(Name = "IsActive")]
    public bool IsActive { get; set; }

    [Column(Name = "LicenseTypeID")]
    public int LicenseTypeID { get; set; }
}

每个用户可以有多个许可证。通常我会在 License UserID 中添加一个字段。但是有没有办法将List添加到User?如果是这样,我该如何设计 User Table?

感谢您的帮助

如果必须将许可证分配给用户,那么您需要将该事实存储在数据库中的某个位置。通常的做法是在许可证中添加一个 UserId 属性。这将在用户记录中生成许可证列表。

您可以手动添加许可证列表,但您仍然需要用数据填充该列表。

另一种选择是使用 User/Licence table 将用户映射到许可证。这将通过映射 table.

添加从用户到许可证的间接引用

如果您想向用户 class 添加更多未存储在数据库中的属性,那么您可以在同一命名空间中创建部分 class:

public partial class User
{
    public List<Licence> Licences { get; set; }
}

但是,您需要编写加载用户记录时填充此列表所需的代码。