特定のインターフェイスを実装するすべてのエンティティに不足している言語エントリを追加する一般的な方法を作成する必要があります。私は自分のコレクションのプロパティを取得する方法を知ったが、私はまだの前に新しい値を追加するにはを知らない。エンティティのナビゲーションプロパティコレクションに新しいエントリを追加する
私のpublic override int SaveChanges()
の処理に続いて、
foreach (var translationEntity in ChangeTracker.Entries(<ITranslation>))
{
if (translationEntity.State == EntityState.Added)
{
var translationEntries = translationEntity.Entity.GetType()
.GetProperties(BindingFlags.Public | BindingFlags.Instance)
.Where(x => x.CanWrite &&
x.GetGetMethod().IsVirtual &&
x.PropertyType.IsGenericType == true &&
typeof(IEnumerable<ILanguage>).IsAssignableFrom(x.PropertyType) == true);
foreach (var translationEntry in translationEntries)
{
//Add missing items.
}
}
}
クラスのコードサンプルはChangeTrackerから
public partial class FileType : ITranslation
{
public long FileTypeId { get; set; }
public string AcceptType { get; set; }
public virtual ICollection<FileTypeTranslation> FileTypeTranslations { get; set; }
public FileType()
{
this.FileTypeTranslations = new HashSet<FileTypeTranslation>();
}
}
public class FileTypeTranslation : EntityTranslation<long, FileType>, ILanguage
{
[Required]
public string TypeName { get; set; }
}
public partial class ElementType : ITranslation
{
public long ElementTypeId { get; set; }
public string Code { get; set; }
public virtual ICollection<ElementTypeTranslation> ElementTypeTranslations { get; set; }
public ElementType()
{
this.ElementTypeTranslations = new HashSet<FileTypeTranslation>();
}
}
public class ElementTypeTranslation : EntityTranslation<long, ElementType>, ILanguage
{
[Required]
public string Description { get; set; }
}
もっと教えてください。何が効いていないのですか?新しい翻訳エンタントを追加するコードはどのように見えますか? –
@ KrzysztofSkowronekあなたがモデルをいくつかのコレクションのプロパティを持っていると想像し、ChangeTrackerからこのコレクションを変更したいと思っています。このコレクションには既知の構造があると考えてください。 –
OKですが、上記のコードでは動作しないのは何ですか?私はあなたがオーバーライドメソッドの最後のものとしてbase.SaveCahngesを呼び出すことを控えているので、あなたが望むことをする必要があります。このコレクションはITranslationインターフェイスの一部ですか?または、この翻訳オブジェクトのコレクションですか? –