次のモデルをセットアップしました。
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