我在ASP.NET MVC应用程序中首先使用实体框架代码.我的一个类有几个列加在一起.我将这些列作为计算列存储在表中,方法是在数据库初始化程序中运行alter table脚本.让我们说班级看起来像:
public class Bond { public decimal ParAmountOfIssuance { get; set; } public decimal AccruedInterest { get; set; } public decimal Premium { get; set; } public decimal OriginalIssueDiscount { get; set; } }
alter脚本是这样的:
alter table Bonds add TotalSources as (ParAmountOfIssuance + AccruedInterest + Premium - OriginalIssueDiscount)
我想要“总来源”列可用于在网络应用程序中查看.什么是最好的方式来完成这个? [DatabaseGenerated(DatabaseGeneratedOption.Computed)]属性不起作用,因为EF Code First在运行alter脚本之前在类中创建表.
欢迎任何建议.
解决方法
我有一些解决方法.
您只能在现有数据库上使用计算字段.
[DatabaseGenerated(DatabaseGeneratedOption.Computed)] public decimal TotalSources { get; set; }
DELETE FROM [dbo].[EdmMetadata]
CF将假定它是现有的数据库,它将工作,我刚刚尝试.
更新我忘了,如果你添加属性到你的债券实体这样,然后在你的脚本,你需要改变它使它计算,不添加:)您甚至可以手动“同步”数据库和模型 – 在您没有此字段的情况下,将所有工作都添加到模型中,在计算的模型中将其添加到计算表中.当您从edm元数据表中删除哈希表时,CF将无法使用数据库重新生成模型.