我应该将一个可以为空的双重转换为int吗?

时间:2014-05-31 20:57:40

标签: c# mysql entity-framework visual-studio-2013

假设我有两个SQL表:TableAuditTableTable中的org_id列是float类型,允许使用null。此外,org_id不是主键。具有相同名称的列位于AuditTable中。我还有一个EditTable课,用于对TableAuditTable进行更改。 EditTable的成员通过用户界面设置。 EditTable还包含org_id成员。

没有充分理由说明Table.org_id是浮动的;它将始终包含整数值。但是,由于Table已存在,我无法更改Table.org_id的类型。但是,由于我创建了AuditTableEditTable,因此我可以将AuditTable.org_idEditTable.org_id设置为任何类型。

当Visual Studio将Table转换为C#类时,Table.org_id将成为Nullable<double>。我是否应该AuditTable.org_id允许使用空值的浮点数,并使EditTable.org_id成为可以为空的双重符合Table.org_id?或者我应该同时制作AuditTable.org_idEditTable.org_id整数,然后进行一些投射?但是,我正在考虑远离强制转换为安全方面而只是使类型与原始Table匹配。

感谢您的任何建议。

1 个答案:

答案 0 :(得分:2)

哦,将连接键存储为浮点数是个坏主意。我希望SQL实际上禁止这种做法。问题是0.9999999999可能看起来像1.00000000,但它们在加入时(或在where子句中)不匹配。对于这样的条件,你有什么看得见的东西要好得多。

首先,去任何你可以的人,乞求/贿赂/奉承/鼓励他们这样做:

 alter table `table` modify org_id int;

如果这不起作用,你就有一个难题。查询性能要好得多,连接键的类型相同,甚至是我不同意的类型。此外,这对数据库来说是一个非常重要的概念。因此,您无法更改该连接密钥。

相反,我认为您应该在表格中添加一个新密钥,称为org_id_int。这将具有正确的类型,一个有用的索引 - 除了漂亮的名称之外的所有东西。用于连接。使用另一个键进行现有表的连接,直到它被修复。