gpt4 book ai didi

c# - 如果数据库中的列发生变化,有没有办法不破坏代码?

转载 作者:太空狗 更新时间:2023-10-29 22:03:28 26 4
gpt4 key购买 nike

假设我声明了一个数据表,并且我已经为这个数据表分配了一个从调用存储过程返回的结果,所以现在,我的数据表在访问其中的一行时包含如下内容:

string name = dr["firstname"];
int age = (int)dr["age"];

如果将 firstname 更改为 first_name 并删除 age,代码显然会中断,因为现在模式已中断,那么有没有一种方法可以始终自动使模式与代码保持同步,而无需手动执行?是否有某种元描述文件描述数据库表中的列并相应地更新它们?在这种情况下,LINQ 是否可以因其强类型性质而有所帮助?

最佳答案

  1. 按列名选择的老式 View 怎么样,它们总是以指定顺序输出具有指定名称的列。如果下面的表需要更改,则 View 会在必要时进行修改,但仍会输出与基础表更改之前相同的输出——就像对象的接口(interface)一样。应用程序引用 View 而不是表并继续正常工作。这归结为标准的数据库应用程序设计,应该在任何(甚至是基础的)数据架构师类(class)中教授——但我很少看到这些在业务应用程序中实际使用。事实上,我目前正在从事的项目是我第一次看到采用这种方法的项目,实际看到它被正确使用令人耳目一新。

  2. 使用存储过程,如果您的表发生变化,请修改存储过程以使输出仍然相同 - 以类似的方式使用以将应用程序与基础表隔离开来,从而使应用程序免受任何表更改的影响。如果您希望在 View 更合适的地方执行动态联接、筛选和聚合,这还不够。

  3. 如果您想在应用程序端执行此操作,请直接在查询中指定要查询的字段名称,而不是使用“select *”并依赖字段名称的存在。但是,如果表中的字段名称发生变化,或者列被删除,您仍然卡住了,您必须修改查询。

  4. 如果字段的名称​​将改变,但所有字段将始终存在,这些字段的内容将保持不变并且字段将保持相同的顺序,您可以按索引而不是按名称引用字段。

  5. 使用其他人指定的对象关系映射器,但我认为这不一定会教出良好的设计,而不是希望框架的设计足够好并且适合您正在做的事情,这可能或可能并非如此。不过,我并不是真的认为这是一个好方法。

关于c# - 如果数据库中的列发生变化,有没有办法不破坏代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1929205/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com