所有类都有相同的变量

时间:2014-06-03 07:31:22

标签: c# entity-framework generics

我有2个变量

  • Date-Time-Modified这是一个日期 - 时间变量
  • Is-Deleted变量,它是一个布尔值。

这两个变量可以在我拥有的每个类中找到,每次从数据库中插入,编辑或删除对象时,我都需要初始化这些变量。有没有办法做到这一点?

3 个答案:

答案 0 :(得分:4)

使用基类。添加2个所需属性(DateTime,IsDeleted)。每个派生类现在都拥有此属性。您可以单独设置它们或迭代基类型以指定值。 您还可以使用事件自动触发更新。但我想你只想创建一个条目然后将其DateTime属性设置为实际的日期时间。

您还可以将此任务委派给数据库。它将负责设置此属性。

我懒惰朋友的一个例子;)

abstract class DatabaseEntryBase
{
    public DatabaseEntryBase()
    {
        // You can initialize properties to a default value here
        this.IsDeleted = false;
    }

    public DateTime ModifiedTime { get; set; }
    public bool IsDeleted { get; set; }
}

class Entry : DatabaseEntryBase
{}

static void Main()
{
    //-- Do your SQL stuff --//

    var newEntry = new Entry(); 
    newEntry.ModifiedTime = DateTime.Now;
    newEntry.IsDeleted = false;
}

如果您需要所有实例保存相同的值(例如多次删除),请将它们推入集合(此处为List<DatabaseEntryBase>类型的EntryCollection)并迭代它们:

public void SetAllItems()
{
    foreach (DatabaseEntryBase entry in EntryCollection)
    {
        entry.ModifiedTime = DateTime.Now;
        entry.IsDeleted = [...];
    }
}

使用界面将完成相同的操作!它可以命名为ITaggable,并将这两个属性定义为契约。

答案 1 :(得分:2)

有一个包含这些成员的基类,然后让其他类扩展那个成员。

然后在基础上有一个方法来初始化它们。然后在插入上调用该方法等。

 base.InitialiseVariables()

答案 2 :(得分:0)

  

有没有其他方法可以在不需要的情况下初始化它们   调用方法?

可能另一种方法是Aspect-Oriented Programming。例如,PostSharp

代码看起来像这样:

[UpdateTimestamp]
public void InsertProduct(Product product)
{
    // Your logic here
}