2017-08-18 14 views
0

ここで非常にばかげた状況に上陸しました。EFコード第1の主キーとしての参照キー

私はEFコア、ASP.NETコア、Visual Studio 2017コミュニティでコーディングしています。 Userは、名前のようにすべてのフィールドを持つテーブルをある

public class LoginRecord 
{ 
    public User User { get; set; } 

    public int UserId { get; set; } 

    public DateTime LastLogin { get; set; } 
    public int LoginCount { get; set; } 
} 

、電子メールなど

私はadd-migrationを行い、エラー:

私のような主キーを持っていないモデルがあります

エンティティタイプ 'LoginRecord'は、主キーを定義する必要があります。

それから私はこのようUserIdフィールドに[Key]注釈を追加することで試してみました:

public class LoginRecord 
{ 
    public User User { get; set; } 

    [Key]  
    public int UserId { get; set; } 

    public DateTime LastLogin { get; set; } 
    public int LoginCount { get; set; } 
} 

が、今、EFは、外部キーになりUserId1と呼ばれる新しい列を作成します。

UserIdは参照キーに過ぎず、このテーブルには主キーは必要ありません。

可能ですか?はいの場合は助けてください!

+4

EF **は、各テーブルの主キー**を必要としています - ので、あなたが... –

+0

あなたが使用しようとすることができます構成された主キー。 UserId + LastLogin + Countと言ってくださいが、動作しているかわかりません) – SergeyAn

+0

LoginRecordIdをプライマリキーとして追加してください – Alexan

答えて

-1

試してみてください。

[ForeignKey("UserId"), Column(Order = 0)] 
public int UserId { get; set; } 
+0

なぜか説明してください。 –

+0

私はこれが最初のものとして私の列に置かれることを願っていますが、PKeyではなく... –

+0

キーがコンポジットでない場合、 'Column'属性は関係ありません。コメントの中にあるように、ここでの実際のポイントは、 'LoginRecord'がそれ自身のPKを必要とすることです。 –

0

あなたは主キーを追加する必要があります。 私はすべてのテーブルがテーブル+ IDのような名前のフィールドを取得する必要があることを学びました。あなたはそれがより好きなら、あなたはまたそれをidと名付けることができます。 :) すべてのレコードが一意になるようにします。

だから私はこのような何かにあなたのモデルを変更することができアドバイスします:

public class LoginRecord 
{ 
    [Key] 
    public int LoginRecordID {get; set;} 

    public User User { get; set; } 

    public int UserId { get; set; } 

    public DateTime LastLogin { get; set; } 
    public int LoginCount { get; set; } 
} 
関連する問題