Model.cs 928 B

1234567891011121314151617181920212223242526272829303132333435
  1. using System;
  2. using System.Linq.Expressions;
  3. using System.Windows.Media;
  4. using InABox.Configuration;
  5. using InABox.Core;
  6. namespace PRSDesktop
  7. {
  8. public interface IModel
  9. {
  10. Guid ID { get; }
  11. }
  12. public abstract class Model<TModel, TEntity> : IModel where TModel: Model<TModel, TEntity> where TEntity : Entity
  13. {
  14. public Guid ID { get; }
  15. public abstract Columns<TEntity> GetColumns();
  16. public static Columns<TEntity> Columns => (Activator.CreateInstance(typeof(TModel), new object[] { null }) as Model<TModel,TEntity>).GetColumns();
  17. public CoreRow? Row { get; }
  18. protected TType? Get<TType>(Expression<Func<TEntity,TType>> property) => Row != null ? Row.Get<TEntity,TType>(property) : default(TType);
  19. public Model(CoreRow row)
  20. {
  21. Row = row;
  22. ID = Get(x => x.ID);
  23. }
  24. }
  25. }