首页 > 解决方案 > 如何使用 C# 获取基类型类的值

问题描述

下面是我的代码。我想获取 Test.Details & Test.Events 的值

public partial class Test : BaseTypes.ValidationEntityBase
{
    public bool Active { get; set; }

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
    public Test()
    {
        Events = new HashSet<Event>();
    }

    [Key]
    [StringLength(20)]
    public string ID { get; set; }

    [Required()]
    [StringLength(50)]
    public string Details { get; set; }

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    [XLTargetName(null)]
    public virtual ICollection<Event> Events { get; set; }

    public override void AddToModel(System.Data.Entity.DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Test>().HasMany(e => e.Events).WithRequired(e => e.Test).WillCascadeOnDelete(false);
    }
}

public partial class Events : BaseTypes.ValidationEntityBase
{
    public Events()
    {
        Active = true; //DEFAULT TO ACTIVE
    }

    [Key()]
    public string EventID { get; set; }

    [Required()]
    [StringLength(20)]
    public string ID { get; set; }

    [Required()]
    [StringLength(50)]
    public string EventDetails { get; set; }

    [XLTargetName(null)]
    [JsonIgnore]
    [ScriptIgnore]
    public virtual Test Test { get; set; }

    public override void AddToModel(System.Data.Entity.DbModelBuilder modelBuilder)
    {
    }
}

public abstract class ValidationEntityBase : IValidationEntity
{

    public ValidationEntityBase()
    {
        Valid = true;
    }

    public virtual void Run(CtxTest context, IValidationEntity entity)
    {
    }
}

public interface IValidationEntity
{
    void Run(CtxTest context, IValidationEntity entity);
}

这是我的业务对象

public void RunRules(string typeCode)
{
    var inputRules = Rule.FindRules(this.GetContext(), typeCode);
    foreach (var rule in inputRules)
    {
        rule.Run<Test>(this.GetContext(), this.Test, "Sample", typeCode);
    }
}

我的规则类:

public void Run<T>(CtxTest context, T entity, string sample, string typeCode) where T : class, IValidationEntity
{
    var validation = this.GetExecutionType();
    var execution = (IValidationEntity)Activator.CreateInstance(validation, sample);
    execution.Run(context, entity);
}

每当运行规则时,它将来到下面的类,我得到所有的基本类型(测试类)值

public class Person : ValidationEntityBase
{
    public Person(string msgTypeCode)
    {
        MESSAGE_TYPECODE = msgTypeCode;
    }

    public override void Run(Context.CtxTest context, IValidationEntity entity)
    {
    }
}

如何在运行方法中从 IValidationEntity 实体打印 Test.Details 和 Test.Events 的值,请帮助

标签: c#entity-framework

解决方案


这似乎是最简单的答案:

public interface IValidationEntity
{
    void Run(CtxTest context, IValidationEntity entity);
    string Details { get; }
}   

它将需要显式实现以允许您的类具有不同的实现名称(即string EventDetails),同时仍符合IValidationEntity接口。


推荐阅读