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

标签 c# entity-framework dbcontext

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

public enum ObjectState
{
    Unchanged,
    Added,
    Modified,
    Deleted
}
public interface IObjectState
{
    [NotMapped]
    ObjectState ObjectState { get; set; }
}

最佳答案

您可以使用 partial classes ,如果您可以编辑域对象项目的代码并将基实体声明为分部类。

namespace DomainNameSpace 
{
    public partial class BaseEntity
    {
        // Your properties and method
    }
}

然后在您的 Entity Framework 项目中您可以添加以下代码:

namespace DomainNameSpace 
{
    public partial class BaseEntity
    {
        public enum ObjectState
        {
            Unchanged,
            Added,
            Modified,
            Deleted
        }
        public interface IObjectState
        {
            [NotMapped]
            ObjectState ObjectState { get; set; }
        }
    }
}

或者如果您不能编辑域项目中的文件或不喜欢这种方法,也许继承可以提供帮助。在您的 Entity Framework 项目中创建一个如下所示的类。

namespace YourProjectNameSpace 
{
    public class StatefulEntityClassName : BaseEntity
    {
        public enum ObjectState
        {
            Unchanged,
            Added,
            Modified,
            Deleted
        }
        public interface IObjectState
        {
            [NotMapped]
            ObjectState ObjectState { get; set; }
        }
    }
}

希望这对您有所帮助。

关于C# 如何通过向它添加属性来扩展存在于不同 dll 中的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30907864/

相关文章:

c# - "Object reference not set to an instance of an object"- 但没有什么是空的?

entity-framework-6 - 将 INotifyPropertyChanged 与 Entity Framework 6 DbContext 生成器一起使用

c# double 到字符数组或替代

c# - 将 URL 片段添加到 MVC ActionLink

c# - Entity Framework 6.1 和使用新关键字隐藏成员

asp.net-mvc - 使用 Entity Framework 访问单独数据库的表

entity-framework - EF 代码第一个 : Treating entity like a complex type (denormalization)

c# - JQuery 更改数据绑定(bind) ASP.NET DropDownList 中的 SelectedValue

c# - 是什么导致在BackgroundAudioPlayer.get_Position()出现System.Runtime.InteropServices.COMException?

asp.net - DbContextOptionsBuilder 不包含 'UseSqlite' 的定义