【发布时间】:2014-11-11 14:30:21
【问题描述】:
我有一个带有实体框架 6 的 Web API 应用程序。 我有 2 个实体 - Player 和 Match,它们之间存在多对多关系:
public class Player {
public string PlayerId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public virtual ICollection<Match> Matches { get; set; }
}
public class Match {
public string MatchId { get; set; }
public DateTime DateTime { get; set; }
public virtual ICollection<Player> Players { get; set; }
}
这就是我的 DBContext 的样子:
public class FIFA15RankingContext : DbContext {
public DbSet<Player> Players { get; set; }
public DbSet<Match> Matches { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder) {
modelBuilder.Entity<Player>()
.HasMany(t => t.Matches)
.WithMany(t => t.Players)
.Map(m => {
m.ToTable("PlayerMatches");
m.MapLeftKey("PlayerId");
m.MapRightKey("MatchId");
}
);
base.OnModelCreating(modelBuilder);
}
}
EF 在幕后为我创建了表格 PlayerMatches (PlayerId, MatchId)。
这是我的 MatchesController(由 VS 2013 搭建):
// POST: api/Matches
[ResponseType(typeof(Match))]
public async Task<IHttpActionResult> PostMatch(Match match)
{
if (!ModelState.IsValid)
return BadRequest(ModelState);
db.Matches.Add(match);
try
{
await db.SaveChangesAsync();
}
catch (DbUpdateException)
{
if (MatchExists(match.MatchId))
return Conflict();
else
throw;
}
return CreatedAtRoute("DefaultApi", new { id = match.MatchId }, match);
}
我希望能够创建新匹配并与现有用户关联。 我无法让它以任何其他方式工作,只能在 db.Matches.Add(match) 之前添加这段代码(闻起来很糟糕):
var playersFromDB = new List<Player>();
if (match.Players != null) {
foreach (var p in match.Players) {
playersFromDB.Add(db.Players.Find(p.PlayerId));
}
}
match.Players = playersFromDB;
我做错了什么?
【问题讨论】:
-
只有现有玩家从表格中获得收入吗?
-
是的,只有现有用户,在数据库中播种。
标签: c# entity-framework entity-framework-6