2016-10-13 10 views
0

私はEntity Frameworkを初めて使用しています。私はデータベースの最初のアプローチを使用しており、エンティティファイルを自動生成しません。私は3つのテーブルUser,DatabaseおよびUserDatabaseを持っています。テーブルUserDatabaseは、UserDatabaseの多対多関係を持っています。私はクラスでこの関係を構築する方法がわかりません。エンティティフレームワーク - リンクテーブルの表現

public class Database 
{ 
    [Key] 
    public int DatabaseId { get; set; } 

    public string DatabaseName { get; set; } 
} 

public class User 
{ 
    [Key] 
    public int? UserID { get; set; } 

    [Required] 
    public string Name{ get; set; } 
} 

public class UserDatabase 
{ 
    [Key] 
    public int UserID { get; set; } 

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

    public int DatabaseID { get; set; } 

    [ForeignKey("DatabaseID")] 
    public virtual Database Database { get; set; } 
} 

これは私の現在のコードです。ユーザーごとに1つのデータベースを追加するとうまくいきます。しかし、複数を追加すると、多重度制約違反エラーが発生します。助けてください。

+0

をだから、一人のユーザーが多くのデータベースを持つことができますか? UserDatabase.Databaseをリストにする必要がありますか? – leetibbett

答えて

0

私は間違いを発見しました。リンクテーブル "UserDatabase"で私は主キーとしてUserIDを言及しているので、私は複数のレコードを追加することができません。それはコンポジットキーでなければならず、ユーザーとデータベースの両方をキーとし、注文を与えました。私は

public class UserDatabase 
{ 
    [Key, Column(Order=0)] 
    public int UserID { get; set; } 

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

    [Key, Column(Order=1)] 
    public int DatabaseID { get; set; } 

    [ForeignKey("DatabaseID")] 
    public virtual Database Database { get; set; } 
} 
0

にそれを変更した以下にごUserDatabaseを変更してみてください。

public class UserDatabase 
{ 
    [ForeignKey("Users")] 
    public int UserID { get; set; } 

    [ForeignKey("Database")] 
    public int DatabaseID { get; set; } 

    public virtual User Users{ get; set; } 
    public virtual Database Database { get; set; } 
} 
関連する問題