我刚刚开始使用 EF CodeFirst,尤其是 dataAnnotations。 现在我正在尽我所能去理解“DatabaseGenerated”属性。 目前我所知道的:
- 使用此属性为我提供了三个选项来处理属性值的创建:Computed、Id 和 None。
- 使用此属性意味着无法手动更新该属性 - 它由数据库完成
所以 - 正如我可以想象使用“Id”选项时会发生什么,我不知道使用“计算”选项时会发生什么。我认为这应该告诉数据库计算字段值。
例如:字段“总和”=字段“价格”+字段“运费”。
但是我怎样才能那样使用它呢?我环顾四周,没有找到任何例子。你能帮帮我吗?
最佳答案
您不能使用 EF 告诉数据库如何计算该列——您只能告诉 EF 该列是数据库生成的,因此应该从数据库中检索它以供您在代码中使用。
要控制数据库如何计算列,您必须在 EF 之外或在数据库初始化逻辑中手动指示它。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
context.Database.ExecuteSqlCommand("RAW SQL HERE");
}
您的 SQL (MS T-SQL) 可能如下所示 (more here):
CREATE TABLE t2 (a int, b int, c int, x float,
y AS CASE x
WHEN 0 THEN a
WHEN 1 THEN b
ELSE c
END)
对于 SQL,这里有一些关于计算列的信息: http://msdn.microsoft.com/en-us/library/ms191250(v=sql.105).aspx
关于entity-framework-4 - 如何定义 DatabaseGenerated.Computed 应该计算什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11502862/