私は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を求めている:私はSportDivisionModelにSportDivisionからデータを転送するautomapperを使用
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; }
}
と逆に。マッピングは次のようになります。
Mapper.CreateMap<SportDivision, SportDivisionModel>()
.ForMember(x => x.Sport, c => c.MapFrom(e => e.Sport.Name));
Mapper.CreateMap<SportDivisionModel, SportDivision>();
そして私はCRUDsとエンティティにモデル化するためのエンティティまたはモデルからのデータを変換genericizedサービスを提供しています。すべてが機能を以下に示し、そのうちの作成を除いて正常に動作します:あなたがdm.FindById(created.Id)
を参照してください非常に最後の行では、
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));
}
は、それが無いスポーツ名でSportDivisionModelオブジェクトを返します。 null参照例外は.ForMember(x => x.Sport, c => c.MapFrom(e => e.Sport.Name));
にあります。エントリがデータベースに作成された後、Sportは読み込まれませんでした。
コードをデバッグしましたが、有効なSportIdのエントリが自分のデータベースのSportDivisionテーブルに入力されていることがわかりましたが、MVCアプリケーションに渡すと、すべて取得されません情報。
これは作成時の問題です。事前にデータベースを作成せずにデータベースからデータを取得するだけの場合、または情報を編集した場合、モデルオブジェクトのSportフィールドにデータが入力されます。私はこれがなぜ起こっているのか分かりませんし、(BaseReferenceEntityのすべてのクラスがSportを指す外部キーを持っているわけではないので)genericサービスコールで.Includeを使用することはできません。
お知らせください。前もって感謝します。