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

1 つのことを除いて、すべて Code First で問題なく作成されます。Events、Deals、および Vacancy テーブルでは、Event、Deal、および Vacancy の UserId プロパティの上に、タイプごとに外部キーが作成されます。

このため、モデルはユーザーごとに各タイプのプロファイルを持つことを主張しますが、ユーザーごとに 1 つのタイプのプロファイルのみが必要です。

桁:

Id (PK、int、null 以外)

UserId (FK、int、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、null 以外)

UserId (FK、int、null 以外)

キー:

PK_dbo.Events

FK_dbo.Events.dbo.Users_UserId

...

しかし、最初にコードを構成する方法、または 3 つの追加の外部キーが作成されない流暢な API を使用する方法を教えてください。(これらのプロファイルの IList のため) イベント オブジェクトからプロファイルを取得するのではなく、ユーザー オブジェクトのみを取得したいと考えています。

前もって感謝します!

KR

4

1 に答える 1

-1

TPH アーキテクチャを使用して問題を解決しました。(階層ごとのテーブル) これで、Person、Business、Artist の識別子を持つ Profile テーブルが 1 つだけになりました。Profile テーブルの主キーは、同時に User テーブルの外部キーでもあります。

KR

于 2013-07-18T12:13:40.790 に答える