我有以下课程:
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'是必需的”
“字段'国家'是必需的”
我在单元测试中首先注意到这一点,然后在我的真实Web UI中。它只会在网站上运行时发生。如果我在调用UNIT OF WORK SAVE之前在我的控制器中放置一个断点,它就不会发生,这似乎就像一个加载问题,但我不确定。
还有其他人经历过这个吗?
我真的不明白为什么当我慢慢地执行该程序时它不会发生,这使得我认为它是某种加载/延迟加载问题。
- UPDATE -
如果我在保存对象之前这样做:
var t = venue.Region;
var tt = venue.Country;
它没有错误?
为什么会这样?
答案 0 :(得分:1)
不是直接的答案,而是一种调试正在发生的事情的方法,以及用于评论的大型方法。 查看上下文上下文是否真的正常。 那里有你没想到的参赛作品......
在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()`
答案 1 :(得分:0)
查看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; }
}