0
我與我從來就沒想到到現在爲止一個問題所困擾.. 我試圖實現與EF代碼優先的應用程序與SQL CE數據庫。 我有給我具體的問題,這兩個主類:實體框架代碼優先Objecxt參考,但目前在數據庫
public class Session
{
public int Id { get; set; }
public Guid Unique { get; set; }
public DateTime DateTime { get; set; }
public virtual Patient Patient { get; set; }
public virtual Test Test { get; set; }
public virtual List<VideoExerciseResult> VideoSessionResults { get; set; }
}
和
public class VideoExerciseResult
{
public int Id { get; set; }
public Guid Unique { get; set; }
public string Word { get; set; }
public bool IsAnswerCorrect { get; set; }
public virtual Session Session { get; set; }
}
當我完成一個會話,並將結果保存EF我黑貂完成操作和節省會議並在數據庫上的結果。 我可以檢查直接在文件。自衛隊的看場,並在VideoExerciseResults列到SESSION_ID引用都存在。
但是,當在代碼中我儘量讓這個操作:
private void GetSessionData()
{
List<VideoExerciseResult> tempList2 = new List<VideoExerciseResult>(UOW.VideoSessionsResults.GetAll());
ListOfVideoSessionResults = new ObservableCollection<VideoExerciseResult>((tempList2.Where(ver => ver.Session.Id == SelectedSession.Id)).ToList());
}
它給我的消息錯誤:未設置爲一個對象的實例
對象引用。
而事實上,如果tempList2一些videoexerciseresult對象的我鼠標懸停時有會話設置爲空,甚至認爲存在.sdf文件的值..
我錯過了什麼?
我將添加有關會議的代碼...... 它是基於一個知識庫和工作單元模式的我也跟着
public class EnPleinProjectUOW : IEnPleinProjectUOW, IDisposable
{
private EnPleinProjectDbContext DbContext { get; set; }
public IRepositoryProvider RepositoryProvider { get; set; }
public IVideoExerciseResultRepository VideoSessionsResults
{
get { return GetRepo<IVideoExerciseResultRepository>(); }
}
public IPatientRepository Patients
{
get { return GetRepo<IPatientRepository>(); }
}
public ISessionRepository Sessions
{
get { return GetRepo<ISessionRepository>(); }
}
public ITestRepository Tests
{
get { return GetRepo<ITestRepository>(); }
}
public IImageFileRepository ImageFiles
{
get { return GetRepo<IImageFileRepository>(); }
}
// We need inverse of control
public EnPleinProjectUOW(IRepositoryProvider repositoryProvider)
{
CreateDbcontext();
repositoryProvider.DbContext = DbContext;
RepositoryProvider = repositoryProvider;
}
private void CreateDbcontext()
{
DbContext = new EnPleinProjectDbContext();
DbContext.Configuration.ProxyCreationEnabled = false;
DbContext.Configuration.LazyLoadingEnabled = false;
DbContext.Configuration.ValidateOnSaveEnabled = false;
}
private IRepository<T> GetStandardRepo<T>() where T : class
{
return RepositoryProvider.GetRepositoryForEntityType<T>();
}
private T GetRepo<T>() where T : class
{
return RepositoryProvider.GetRepository<T>();
}
public void Commit()
{
DbContext.SaveChanges();
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
if (DbContext != null)
{
DbContext.Dispose();
}
}
}
}
這是一般的命令:
public class EnPleinProjectRepository<T> : IRepository<T> where T : class
{
#region Properties
protected DbContext DbContext { get; set; }
protected DbSet<T> DbSet { get; set; }
#endregion
#region Constructor
public EnPleinProjectRepository(DbContext dbContext)
{
if (dbContext == null)
throw new ArgumentNullException("Dbcontext missing");
DbContext = dbContext;
DbSet = DbContext.Set<T>();
}
#endregion
#region Methods
public IQueryable<T> GetAll()
{
return DbSet;
}
public T GetById(int id)
{
return DbSet.Find(id);
}
public void Add(T entity)
{
DbEntityEntry dbEntityEntry = DbContext.Entry(entity);
if (dbEntityEntry.State != System.Data.EntityState.Detached)
dbEntityEntry.State = System.Data.EntityState.Added;
else
{
DbSet.Add(entity);
}
}
public void Update(T entity)
{
DbEntityEntry dbEntityEntry = DbContext.Entry(entity);
if (dbEntityEntry.State == System.Data.EntityState.Detached)
{
DbSet.Attach(entity);
}
dbEntityEntry.State = System.Data.EntityState.Modified;
}
public void Delete(T entity)
{
DbEntityEntry dbEntityEntry = DbContext.Entry(entity);
if (dbEntityEntry.State != System.Data.EntityState.Deleted)
{
dbEntityEntry.State = System.Data.EntityState.Deleted;
}
else
{
DbSet.Attach(entity);
DbSet.Remove(entity);
}
}
public void Delete(int id)
{
var entity = GetById(id);
if (entity == null) return;
Delete(entity);
}
public void DeleteAll()
{
foreach (T entity in DbSet)
Delete(entity);
}
但我」,非常有信心,這個工作,因爲在數據庫中的數據被保存,所有引用......我不知道爲什麼有些人不讀回...
謝謝你的答案
我們不知道是什麼UOW.VideoSessionsResults.GetAll()呢,如果這應該返回Session屬性已滿的對象(就像在數據庫中一樣),那裏可能會出錯。你可以發佈該方法嗎?錯誤信息可能是由於一個事實,即會話未設置像你說的,所以檢查你的拉姆達Id屬性確實會引發異常,如果是空。因此,我們需要找出爲什麼會話屬性不會一直設置... – bump
'ListOfVideoSessionResults'並不是指'List'? –
Tico
@Soner將粘貼在UOW.VideoSessionsResults.GetAll()方法的代碼? – Bellash