C# EntityFramework使用TryGetObjectByKey更新联接表中的复合键值
我首先使用实体框架代码,下面的模型是一个带有复合键的连接表 模型代码C# EntityFramework使用TryGetObjectByKey更新联接表中的复合键值,c#,entity-framework,entity-framework-6,C#,Entity Framework,Entity Framework 6,我首先使用实体框架代码,下面的模型是一个带有复合键的连接表 模型代码 public class Schedule { public int BabyId { get; set; } public int VaccineId { get; set; } public Baby Baby { get; set; } public Vaccine Vaccine { get; set; } public DateTime Time { get; se
public class Schedule
{
public int BabyId { get; set; }
public int VaccineId { get; set; }
public Baby Baby { get; set; }
public Vaccine Vaccine { get; set; }
public DateTime Time { get; set; }
}
实体框架配置代码
public sealed class ScheduleConfig : EntityTypeConfiguration<Schedule>
{
public ScheduleConfig()
{
HasKey(q =>
new
{
q.BabyId,
q.VaccineId
});
HasRequired(t => t.Baby)
.WithMany(t => t.Schedules)
.HasForeignKey(t => t.BabyId);
HasRequired(t => t.Vaccine)
.WithMany(t => t.Schedules)
.HasForeignKey(t => t.VaccineId);
ToTable("Schedule", "dbo");
}
}
公共密封类ScheduleConfig:EntityTypeConfiguration
{
公共ScheduleConfig()
{
HasKey(q=>
新的
{
q、 宝贝,
q、 疫苗
});
HasRequired(t=>t.Baby)
.有许多(t=>t.时间表)
.HasForeignKey(t=>t.BabyId);
需要(t=>t.疫苗)
.有许多(t=>t.时间表)
.HasForeignKey(t=>t.VaccineId);
ToTable(“附表”、“dbo”);
}
}
以下代码更新数据库中的表
public bool Update(T t)
{
var entityName = GetEntityName<T>();
object originalItem;
var key = ((IObjectContextAdapter)Context).ObjectContext.CreateEntityKey(entityName, t);
if (((IObjectContextAdapter)Context).ObjectContext.TryGetObjectByKey(key, out originalItem))
{
((IObjectContextAdapter)Context).ObjectContext.ApplyCurrentValues(key.EntitySetName, t);
}
Context.SaveChanges();
return true;
}
公共bool更新(T)
{
var entityName=GetEntityName();
对象源项;
var key=((IObjectContextAdapter)Context.ObjectContext.CreateEntityKey(entityName,t);
if(((IObjectContextAdapter)Context.ObjectContext.TryGetObjectByKey(key,out originalItem))
{
((IObjectContextAdapter)Context.ObjectContext.ApplyCurrentValues(key.EntitySetName,t);
}
SaveChanges();
返回true;
}
问题是当我更改其中一个键值时,更新方法中If块中的代码永远不会执行,表也永远不会更新。我的问题是我应该改变我的模型还是有更好的代码来处理这个问题。 有什么想法吗