我的公司想要为SQL Server数据库实施审核。在SO上找到了很多非常好的解决方案,结果如下:
界面:
public interface IAuditable
{
string CreatedBy { get; set; }
DateTime? CreatedDate { get; set; }
string CreatedIpAddress { get; set; }
string ModifiedBy { get; set; }
DateTime? ModifiedDate { get; set; }
string ModifiedIpAddress { get; set; }
}
实现接口的BaseClass
。注释应该隐藏设计师的属性:
public abstract class BaseModel : IAuditable
{
[Browsable(false)]
[Bindable(false)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
[EditorBrowsable(EditorBrowsableState.Never)]
public string CreatedBy { get; set; }
[Browsable(false)]
[Bindable(false)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
[EditorBrowsable(EditorBrowsableState.Never)]
public DateTime? CreatedDate { get; set; }
<snip>
...
</snip>
}
源自BaseClass
:
public class Person : BaseModel
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
我重写SaveChanges()
以填充属性。
如果我将集合绑定到datagridview,它不会显示这些列。然而,intellisense仍然在lambda表达式中提供它们。如何从智能感知中隐藏这些属性?
我已经将模型暴露给UI(是的,我知道,不好的做法)。我想在Julie Lerman所说的有限背景下试图隐藏这些内容。但我认为我的SaveChanges()
覆盖将无法填充属性。或者我可能需要将其推送到SQL函数,就像我使用SoftDelete一样。任何帮助将不胜感激。
答案 0 :(得分:1)
不太确定为什么要将这些隐藏在Intellisense中,但您可以明确地实现您的界面。
public abstract class BaseModel : IAuditable
{
string IAuditable.CreatedBy { get; set; }
DateTime? IAuditable.CreatedDate { get; set; }
}
这些属性仍然存在,但只有在明确使用定义为IAuditable
的变量或属性时才能在代码中访问。