我有几个对象(Product,Rule,PriceDetail等),用于管理和存储CRUD应用程序中的信息。我想要一种方法来记录数据更新的时间,为此我创建了一个Update类,在每个数据类中引用为ICollection<Update> Updates
。
当所有表都生成时,EF会在Updates表(Product_ID,Rule_ID等)中为每个类创建一个FK。这似乎非常低效。我可以使用双字段密钥,例如enum ObjectType
和long ID
吗?或者,我可以使用string ID
并强制一个模式,其中字符串的前N个字符标识引用对象吗?如果是后者,数据库可以自动递增字符串值吗?
以下是一些示例代码,已在此处进行裁剪:
public class Update
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public long ID { get; set; }
public string Reason { get; set; }
public DateTime TimeOfUpdate { get; set; }
public long Product_ID { get; set; }
public long Rule_ID { get; set; }
}
public class Product
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public long ID { get; set; }
public string Name { get; set; }
public PriceDetail Price { get; set; }
public ICollection<Update> Updates { get; set; }
}
public class Rule
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public long ID { get; set; }
public string Name { get; set; }
public ICollection<Condition> Conditions { get; set; }
public ICollection<Update> Updates { get; set; }
}
答案 0 :(得分:0)
处理审计逻辑有多种方法。
每种解决方案都有其优点和缺点。最适合您的解决方案取决于您的具体用例。