C#如何通过向其添加属性来扩展存在于不同dll中的类?

yo2*_*011 5 c# entity-framework dbcontext

我有n层应用程序,在不同的程序集中有许多层.我使用实体框架6.1,我想向ObjectState基础实体添加属性以跟踪实体状态.问题是BaseEntity位于我的域对象dll,它是独立ObjectState于数据库的,我想在Entity Framework项目中添加,因为这个属性是与实体框架相关的.如何实现这种行为?

public enum ObjectState
{
    Unchanged,
    Added,
    Modified,
    Deleted
}
public interface IObjectState
{
    [NotMapped]
    ObjectState ObjectState { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

Den*_*nis 0

如果您的意思是,您无法IObjectState在 中实现BaseEntity,因为它必须独立于 EF 特定的实体,那么您应该有两组实体 - 一组用于域,一组用于 EF,并在这些组之间使用映射(可能是Automapper):

// domain entities assembly
public abstract class BaseEntity { }

// EF entities assembly
public abstract class BaseEFEntity : IObjectState

// somewhere in the code
Mapper.Map(domainEntity, efEntity);
Run Code Online (Sandbox Code Playgroud)

实际上,当使用分层架构时,这是一种更好的方式,因为每一层都运行其特定的模型。