EntiyFramework - 使用TryGetObjectByKey更新连接表中的复合键值

时间:2015-08-20 19:26:04

标签: c# entity-framework entity-framework-6

我首先使用Entity框架代码,以下模型是带有复合键的连接表

型号代码

    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");

    }
}  

数据库中的以下代码更新表

     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;
    }  

问题是当我更改其中一个键值时,更新方法中的If块中的代码永远不会执行,并且表永远不会更新。
 我的问题是我应该更改我的模型还是有更好的代码可以解决这个问题。 有什么想法吗?

0 个答案:

没有答案