私はEntity Framework 6.1を使用して、データベースの最初のアプローチでアプリケーションを構築しようとしています。1つのプロパティをエンティティフレームワークとの複数のリレーションにマップするにはどうすればよいですか?
ローカルのプロパティとしてデフォルトKey
という別名Id
を使用しないで、1対多の関係を構築する方法に困惑しています。
私は、以下の二つのモデルを持ってここで最初の
public class UserToClient
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[ForeignKey("ViewClient")]
public int ClientId { get; set; }
[ForeignKey("Team")]
public int DefaultTeamId { get; set; }
public bool IsActive { get; set; }
public virtual ViewClient ViewClient { get; set; }
public virtual Team Team { get; set; }
public virtual ICollection<Team> Teams { get; set; }
}
は私UserToClient
モデルの中で私の2番目のモデル
public class Team
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public bool IsActive { get; set; }
public string Name { get; set; }
[ForeignKey("ViewClient")]
public int ClientId { get; set; }
public virtual ICollection<ViewClient> ViewClients { get; set; }
public virtual UserToClient UserToClient { get; set; }
}
で、私は1対多の関係を作成したい「ワンUserToClient
ました多くTeam
"
最終結果では、このようなことをしたいです
using(var connection = new AppContext())
{
var userToClients = connection.UserToClients
.Include(x => x.Team)
.Include(x => x.Teams)
.ToList();
//Do something with userToClients
//Do something with userToClients.Team
//Do something with each team
foreach(var team in userToClients.Teams)
{
//Do something with 'team'
}
}
私は「エンティティの外」手動でクエリを記述した場合、私はこの
SELECT *
FROM [UserToClient] AS r
LEFT JOIN [Team] AS t ON t.ClientId = r.ClientId
ような何かを行うことになる問題
関係はClientId
ないというプロパティを指すように必要主キーId
。
エンティティは現在このようなクエリを生成しており、Id
からClientId
に変更することができます。
SELECT *
FROM [UserToClient] AS r
LEFT JOIN [Team] AS t ON t.Id = r.ClientId
Id
が主キーであることを理解することが重要であるが、この場合には、私は主要なものではありませんキーで参加したいです。
この問題を解決するにはどうすればよいですか?私はこの
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Team>()
.HasRequired(x => x.UserToClient)
.WithMany(x => x.Teams)
.HasForeignKey(f => f.ClientId);
}
のようなコンテキストクラスでOnModelCreating
メソッドをオーバーライドすることで、この問題を解決しようと
試み
私は地元のproperyはClientId
であるという関係を伝える方法を必要とし、 not Id
どうすれば修正できますか?
私はデータベースの最初のアプローチを使用しています。しかし、私は自分のモデルを書くことを選んで、自動生成されたコードの周りを減らします。どうすればいい? – Jaylen
私が掲示した例は、コードの最初のモデルです。 Fluent APIを使用して、 'DbContext.OnModelCreating(DbModelBuilder)'関数でリレーションを指定します – Bwolfing