C# 将一个实体对象的基类属性复制到与第一个实体对象从同一基类继承的第二个实体对象 让我们考虑下面的类: public class BaseEntity { public BaseEntity() { Created = DateTime.Now; } [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public virtual Guid Id { get; set; } public virtual DateTime Created { get; set; } [Required] public virtual string Code { get; set; } } public interface IBaseHistory { string EntityName { get; set; } string LoggedUserData { get; set; } string ModificationType { get; set; } string ExtraInfo { get; set; } } public abstract class OrderBase : BaseEntity { public string Prop1 { get; set; } public string Prop2 { get; set; } } public class Order : OrderBase { public Order() { } public virtual Client Owner { get; set; } } public class OrderHistory : OrderBase, IBaseHistory { public string EntityName { get; set; } public string LoggedUserData { get; set; } public string ModificationType { get; set; } public string ExtraInfo { get; set; } }

C# 将一个实体对象的基类属性复制到与第一个实体对象从同一基类继承的第二个实体对象 让我们考虑下面的类: public class BaseEntity { public BaseEntity() { Created = DateTime.Now; } [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public virtual Guid Id { get; set; } public virtual DateTime Created { get; set; } [Required] public virtual string Code { get; set; } } public interface IBaseHistory { string EntityName { get; set; } string LoggedUserData { get; set; } string ModificationType { get; set; } string ExtraInfo { get; set; } } public abstract class OrderBase : BaseEntity { public string Prop1 { get; set; } public string Prop2 { get; set; } } public class Order : OrderBase { public Order() { } public virtual Client Owner { get; set; } } public class OrderHistory : OrderBase, IBaseHistory { public string EntityName { get; set; } public string LoggedUserData { get; set; } public string ModificationType { get; set; } public string ExtraInfo { get; set; } },c#,entity-framework,inheritance,C#,Entity Framework,Inheritance,我在我的项目中使用代码优先的方法。我想为模型中的每个实体创建历史实体。为此,我必须使用以下方法: 对于每个历史记录表,我还想添加一些额外字段,例如: ModificationType或EntityName等。为了实现这个想法,我使用了IBaseHistory接口,正如您在我的示例中看到的。 问题是:如何将一个实体对象(Order实体的Prop1和Prop2)的基类属性复制到第二个实体对象(OrderHistory),该对象与第一个实体对象(OrderBase)从同一基类继承? 我认为最简单的方法

我在我的项目中使用代码优先的方法。我想为模型中的每个实体创建历史实体。为此,我必须使用以下方法: 对于每个历史记录表,我还想添加一些额外字段,例如: ModificationType或EntityName等。为了实现这个想法,我使用了IBaseHistory接口,正如您在我的示例中看到的。 问题是:如何将一个实体对象(Order实体的Prop1和Prop2)的基类属性复制到第二个实体对象(OrderHistory),该对象与第一个实体对象(OrderBase)从同一基类继承? 我认为最简单的方法是使用构造函数,例如:

public class OrderHistory : OrderBase, IBaseHistory
{
    public string EntityName { get; set; }

    public string LoggedUserData { get; set; }

    public string ModificationType { get; set; }

    public string ExtraInfo { get; set; }

    public OrderHistory()
    {

    }
    public OrderHistory(OrderBase orderBase)
    {
        this.Prop1 = orderBase.Prop1;
        this.Prop2 = orderBase.Prop2;
    }
}
然后我可以很容易地做到:

Order order= new Order() {Prop1 = "val1", Prop2 = "val2"};
OrderHistory orderHistory = new OrderHistory(order);
如果我的实体有40个字段呢?在这种情况下,我必须添加40行代码,如果我忘记了一个字段怎么办?我考虑过使用AutoMapper,但我也不知道这是否是解决问题的好方法。
我想用最简单的方法解决这个问题。我愿意接受任何建议。干杯。

有帮助吗?你的历史记录表在哪里?您似乎希望复制或克隆表,然后添加其他列。一旦您有了一个表或列表对象,复制/克隆就变得更容易了。@jdweng OrderHistory是我的历史记录Table@mjwills我将使用来自您的知识链接进行一些测试,并将看到:)DataTable应该是可枚举的,因此:DataTable newTable=OrderHistory.AsEnumerable().CopyToDataTable();然后添加新列。