我有两个实体:
public class Tournament
{
[Key]
public Int32 Id { get; set; }
public string Name { get; set; }
public virtual TournamentSite Site { get; set; }
}
public class TournamentSite
{
[Key]
public Int32 Id { get; set;}
public string Name { get; set; }
}
并在DbContext中:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Tournament>()
.HasRequired<TournamentSite>(t => t.Site)
.WithRequiredDependent()
.Map(p => p.MapKey("IdSite"));
base.OnModelCreating(modelBuilder);
}
一切正常,我的意思是当我加载锦标赛时,它会获得具有正确ID和名称的TournamentSite,问题是我想要为特定锦标赛更改TournamentSite。我尝试过这样的事情:
var tournament = dbContext.Tournaments.Find(1); // Get tournament with id 1
tournament.Site.Id = 2;
dbContext.SaveChanges();
我希望在锦标赛表中,IdSite字段现在为2而不是1,但无论我使用IdSite字段用于将锦标赛链接到TournamentSite,它总是1。
欢迎任何帮助, 感谢。
答案 0 :(得分:1)
另一种选择是将IdSite实际映射到您的锦标赛对象,如此
public class Tournament
{
[Key]
public Int32 Id { get; set; }
public string Name { get; set; }
public Int32 TournamentSiteId { get; set;}
public virtual TournamentSite Site { get; set; }
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Tournament>()
.HasRequired<TournamentSite>(t => t.Site)
.WithRequiredDependent()
.Map(p => p.MapKey("IdSite"));
modelBuilder.Entity<Tournament>()
.Property(p => p.TournamentSiteId)
.HasColumnName("IdSite");
base.OnModelCreating(modelBuilder);
}
现在你应该能够做到这一点
var tournament = dbContext.Tournaments.Find(1); // Get tournament with id 1
tournament.TournamentSiteId = 2;
dbContext.SaveChanges();
et voila!
答案 1 :(得分:0)
您的代码正在尝试更改TournamentSite
的ID,而不是IdSite
的{{1}}。您需要分配Tournament
属性:
Site
答案 2 :(得分:0)
我终于设法做到了,我已经重做了这样的模型:
public class Tournament
{
[Key]
public Int32 Id { get; set; }
public string Name { get; set; }
public Int32 IdSite { get; set; }
[ForeignKey("IdSite")]
public virtual TournamentSite Site { get; set; }
}
public class TournamentSite
{
[Key]
public Int32 Id { get; set;}
public string Name { get; set; }
}
在OnModel中没有什么需要做的,创建函数如下所示:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
}
现在我可以使用:
var tournament = dbContext.Tournaments.Find(1);
tournament.IdSite = 2;
dbContext.SaveChanges();
感谢您的帮助。