これは重複した質問かもしれませんが、私は同様の質問に提供された回答を使って試してみましたが、何も成功しませんでした。EF 5複合主キー(何らかの理由で動作しません)
状況は次のとおりです。私は学校プロジェクト用の仮想銀行を作成しています。最初のプロトタイプでは、単にアカウントテーブルと取引テーブルが必要です。トランザクションとアカウントの関係は、すべてのトランザクションが2つのアカウント(FromとTo)を参照し、アカウントが0 ... nトランザクションを参照するということです。
私が使用してきたコード:
public class Transaction
{
[Column(Order = 0), Key, ForeignKey("From")]
public int FromID { get; set; }
[Column(Order = 1), Key, ForeignKey("To")]
public int ToID { get; set; }
public float Amount { get; set; }
public virtual Account From { get; set; }
public virtual Account To { get; set; }
}
public class Account
{
public int ID { get; set; }
[Required]
public String Email { get; set; }
[Required]
public float Balance { get; set; }
[InverseProperty("From")]
public virtual ICollection<Transaction> FromTransactions { get; set; }
[InverseProperty("To")]
public virtual ICollection<Transaction> ToTransactions { get; set; }
}
を、私は、問題を解決しているはずである[Column(Order = 0)]
と[Column(Order = 1)]
を使用していたが、VSはまだメッセージを示しています
Unable to retrieve metadata for 'Bank_API.Models.Account'. Unable to
determine the composite primary key ordering for type
'Bank_API.Models.Transactions'. Use the ColumnAttribute or the HasKey
method to specify an order for composite primary keys.
これが私の最初のものですASP.NETやEFを使用しているので、穏やかにしてください。
P.S.私は.NET 4.6.1とEF 5を使用しています。
ない百パーセント確かに、しかし、問題は、 'Account' PK' ID'列(文字列のために使用される様々な種類が原因で発生することが)と 'Transaction'' FromId' /' ToId'カラム(int) –
プロパティ名を 'AccountId'とし、' id'型をintに変更してみてください。また、主キーを作成するために 'id'プロパティに' [Key] '属性を適用する必要があると思います。 –
両方のおかげで、文字列<-> intに関する問題は解決されましたが、手元の問題は解決されませんでした。また、アカウントのIDフィールドに[Key]を追加しても違いはありませんでした(私が読んだように、名前IDの整数フィールドがデフォルトでプライマリキーであることは間違いありません) – Jarinus