实体验证错误-似乎是加载问题

本文关键字:加载 问题 似乎是 验证 错误 实体 | 更新日期: 2023-09-27 17:51:25

我有以下类:

public class Venue : BaseObject, IBaseObject
{
    [Required]
    public virtual User Owner { get; set; }
    [Required]
    [MaxLength(40)]
    public string Name { get; set; }
    [DisplayName("Region")]
    [Required]
    public virtual StandingData Region { get; set; }
    [DisplayName("Country")]
    [Required]
    public virtual StandingData Country { get; set; }
}

public class StandingData : BaseObject
{
    public string Type { get; set; }
    public int SequenceNumber { get; set; }
    public string Value { get; set; }
    public override string ToString()
    {
        return Value;
    }
}

我的模型生成器看起来像:

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
        modelBuilder.Entity<Venue>().HasRequired(x => x.Region);
        modelBuilder.Entity<Venue>().HasRequired(x => x.Country);
    }

得到以下验证错误:

"字段'Region'是必需的"

"字段'Country'是必需的"

我首先在我的单元测试中注意到这一点,然后在我真正的web UI中。它只有在网站上运行时才会发生。如果我把一个断点在我的控制器之前的工作单元保存被称为它不会发生,它似乎是一个加载问题,但我不确定。

其他人有过这样的经历吗?

我真的不明白为什么当我慢慢地执行程序时它没有发生,这让我认为这是某种加载/延迟加载问题。

——更新

如果我在保存对象之前这样做:

        var t = venue.Region;
        var tt = venue.Country;

不出错吗?

为什么会这样?

实体验证错误-似乎是加载问题

不是一个直接的答案,而是一种调试正在发生的事情的方法,请不要评论。来看看context context是否正确。有没有你没有预料到的条目?等等....

在MyContext类中:

 public void FullDump()
    {
        Debug.WriteLine("=====Begin of Context Dump=======");
        var dbsetList = this.ChangeTracker.Entries();
        foreach (var dbEntityEntry in dbsetList)
        {
            Debug.WriteLine(dbEntityEntry.Entity.GetType().Name + " => " + dbEntityEntry.State);
            switch (dbEntityEntry.State)
            {
                case System.Data.Entity.EntityState.Detached:
                case System.Data.Entity.EntityState.Unchanged:
                case System.Data.Entity.EntityState.Added:
                case System.Data.Entity.EntityState.Modified:
                    WriteCurrentValues(dbEntityEntry);
                    break;
                case System.Data.Entity.EntityState.Deleted:
                    WriteOriginalValues(dbEntityEntry);
                    break;
                default:
                    throw new ArgumentOutOfRangeException();
            }
            Debug.WriteLine("==========End of Entity======");
        }
        Debug.WriteLine("==========End of Context======");
    }

你可以从即时窗口

调用它
 `MyContext.FullDump()`

看看这个http://msdn.microsoft.com/en-us/data/jj713564

检查推荐的声明关系的方法,例如

public class Venue : BaseObject, IBaseObject
{
[Required]
public virtual User Owner { get; set; }
[Required]
[MaxLength(40)]
public string Name { get; set; }
[ForeignKey("RegionId")]
[DisplayName("Region")]
[Required]
public virtual int RegionId { get; set; } // cant see baseObject so I just assume int
[ForeignKey("CountryId")]
[DisplayName("Country")]
[Required]
public int  CountryId { get; set; }

// nav props
public virtual StandingData Region { get; set; }
public virtual StandingData Country { get; set; }
}