0

我设置了以下模型:

    public class User
{
    [Key]
    [Required]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    [Required]
    [StringLength(50)]
    public string UserName { get; set; }

    [Required]
    public TypeOfProfile ProfileType { get; set; }

    [StringLength(50)]
    public string ProfileName { get; set; }

我不想使用 TPT。我希望用户表是快速加载的简短摘要表。一旦点击用户,他的个人资料就会被获取。我有多种类型的个人资料。例如

public class Person | Business | Artist
{
    [Key]
    [Required]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.None)]
    public int UserId { get; set; }

    [Required]
    [StringLength(50)]
    public string Name { get; set; }

    [Required]
    public int AddressId { get; set; }

    [ForeignKey("UserId")]
    public virtual User User { get; set; }

    public virtual Address Address { get; set; }

    public virtual IList<Deal> Deals { get; set; }

    public virtual IList<Event> Events { get; set; }

    public virtual IList<Vacancy> Vacancies { get; set; }

通过这种方式,我可以为某个用户创建配置文件,并为其提供与用户 ID 相同的 ID,因此是 DatabaseGeneratedOption.None。这一切都很好。但随后集合就位:交易,活动,空缺,..

public class Event
{
    [Key]
    [Required]
    [Column(Order = 0)]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    [Required]
    [Column(Order = 1)]
    public int UserId { get; set; }

    [Required]
    public int AddressId { get; set; }

    ...

    public virtual User User { get; set; }

    public virtual Address Address { get; set; }

除了一件事之外,使用 Code First 可以很好地创建所有内容。在 Events、Deals 和 Vacancy 表中,在 Event、Deal 和 Vacancy 的 UserId 属性之上为每种类型创建了一个外键。

因此,该模型坚持为用户提供每种类型的个人资料,而我只希望每个用户拥有一种类型的个人资料:

柱子:

Id (PK, int, not null)

UserId (FK, int, not null)

键:

PK_dbo.Events

FK_dbo.Events.dbo.Artists_UserId

FK_dbo.Events.dbo.Businesses_UserId

FK_dbo.Events.dbo.People_UserId

FK_dbo.Events.dbo.Users_UserId

...

我只希望创建 Users_Id 的外键。当我删除其他人、企业和艺术家的 fk 时,一切都按我的意愿工作。像这样:

柱子:

Id (PK, int, not null)

UserId (FK, int, not null)

键:

PK_dbo.Events

FK_dbo.Events.dbo.Users_UserId

...

但是我怎样才能首先配置代码或通过流利的 API 来配置没有创建 3 个额外外键的代码。(由于这些配置文件的 ILists)我不希望能够从事件对象中检索配置文件,只有用户对象。

提前致谢!

4

1 回答 1

-1

我使用 TPH 架构解决了我的问题。(每个层次结构的表)现在我只有一个配置文件表,其中包含人员、业务和艺术家的鉴别器。我的 Profile 表的主键同时是我的 User 表的外键。

于 2013-07-18T12:13:40.790 回答