我有一個名爲SportDivision的EF對象。爲了簡便起見,我將不包括各個領域,只要是相關的那些:模型實體和外鍵對象
[Table("SportDivision", Schema = "dbo")]
public class SportDivision: BaseReferenceEntity
{
public int Id { get; set; }
public string Name { get; set; }
public int SportId { get; set; }
[ForeignKey("SportId")]
public virtual Sport Sport { get; set; }
}
所以它有一個SportId,它是指向表運動的外鍵。
現在,我不能只用一個EF對象在我的意見,所以我有被映射到SportDivision模型類叫做SportDivisionModel:
public class SportDivisionModel: BaseReferenceModel
{
public int Id { get; set; }
public string Name { get; set; }
public int SportId { get; set; }
//Read only fields
public string Sport { get; set; }
}
我用automapper將數據從SportDivision轉移到SportDivisionModel和反之亦然。映射是這樣的:
Mapper.CreateMap<SportDivision, SportDivisionModel>()
.ForMember(x => x.Sport, c => c.MapFrom(e => e.Sport.Name));
Mapper.CreateMap<SportDivisionModel, SportDivision>();
而且我有一個泛型化服務,CRUDs和實體模型或模式轉換數據實體。一切工作正常,除了上創建,它的如下功能:
public TModel Create<TModel, TEntity>(TModel entry)
where TModel : BaseReferenceModel
where TEntity : BaseReferenceEntity
{
var dm = ServiceLocator.Current.GetInstance<ICrudService<TEntity>>();
var raw = Mapper.Map<TModel, TEntity>(entry);
var created = dm.CreateOrUpdate(raw);
return Mapper.Map<TEntity, TModel>(dm.FindById(created.Id));
}
在最後一行,在那裏你看到dm.FindById(created.Id)
,它返回一個SportDivisionModel對象沒有運動的名稱。在.ForMember(x => x.Sport, c => c.MapFrom(e => e.Sport.Name));
中發現空引用異常。剛剛在數據庫中創建條目後,它沒有加載Sport。
我調試的代碼,我看到有一個有效的SportId入口進入到我的數據庫的表SportDivision,但是當我試圖把它交給我的MVC應用程序,它並沒有得到所有信息。
這只是一個關於創建的問題。如果我只是事先從數據庫中獲取數據,或者如果我編輯信息,那麼我的模型對象中的Sport字段就會被填充。我不知道爲什麼會發生這種情況,我不能在我的通用服務調用中使用.Include(因爲並非所有的BaseReferenceEntity類都有指向Sport的外鍵)。
請指教。提前致謝。