我有n层应用程序,在不同的程序集中有许多层。
我使用实体框架6.1,我想将ObjectState
属性添加到基本实体以跟踪实体状态。问题是BaseEntity
位于我的域对象dll中,它与数据库无关,我想在Entity Framework项目中添加ObjectState
,因为此属性与实体框架相关。如何实现此行为?
public enum ObjectState
{
Unchanged,
Added,
Modified,
Deleted
}
public interface IObjectState
{
[NotMapped]
ObjectState ObjectState { get; set; }
}
答案 0 :(得分:2)
如果您可以编辑域对象项目的代码并将基本实体声明为部分类,则可以使用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; }
}
}
}
希望得到这个帮助。
答案 1 :(得分: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);
实际上,当使用分层架构时,当每个层运行其特定模型时,这是一种更好的方式。