我有一个名为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的外键)。
请指教。提前致谢。