gpt4 book ai didi

visual-studio-2012 - EF 中的 POCO 类未按预期工作

转载 作者:行者123 更新时间:2023-12-03 23:27:19 25 4
gpt4 key购买 nike

我在 SQL 中创建了一个数据库,并在 Visual Studio 2012 中创建了一个 EDMX。它自动创建了 POCO (TT) 类。一切看起来都很好。

现在我更改表的列名。我更新了 EDMX。在 XML 中打开 EDMX,一切看起来都很好。

问题 1

在 TT 中运行自定义工具后,我看到另外创建了一个新属性,例如:

SQL table name : Student

Column name : sName

在我的 POCO 课上
public int sName{ get; set; }

自动创建。

现在我将 SQL 中的列名更改为
Column name : studentName

我的 POCO 课
public int sName{ get; set; }

public int studentName{ get; set; }

这是一个错误还是我需要做些什么来解决这个问题?

我应该怎么做才能避免这种情况?

问题 2

此外,如果我更改任何 SQL 列的数据类型并从我的 EDMX 设计器中的数据库更新模型,则不会更新概念模型。我该怎么做?

最佳答案

首先,要了解您的问题,您需要知道的是 EDMX文件只是一个包含 3 个不同部分的 XML 文件:

  • CSDL:概念模式定义语言
  • SSDL:存储模式定义语言
  • MSL:映射规范语言

  • CSDL 包含构成概念模型的实体和关系。 SSDL 描述了您的数据库模型,而 MSL 是 2 之间的映射。

    “从数据库更新模型”过程将更新 SSDL(更改与当前数据库架构不一致的所有内容),它只会在您向数据库架构添加新内容的情况下修改 CSDL。

    这是一种很正常的行为,因为您的概念模式可能/应该与您的数据库模式不同(除非您希望域模型看起来完全像数据库模型,而这显然不是 OOP/DDD 最佳实践)。

    至于@Peru,解决方案是删除相关实体(不是整个 EDMX!),然后执行“从数据库更新模型”过程。

    希望这可以帮助!

    编辑:

    有一个工具,不是免费的,它是一个 Visual Studio 插件,允许您将更改应用到数据库中,包括 CSDL 和 SSDL 文件: Huagati DBML/EDMX Tools .
    唯一的“免费”解决方案是删除需要更新的实体(或该实体中的正确字段)。

    请记住,CSDL 应该由开发人员维护,并且必须看起来像对象模型而不是数据库模型。假设您在实体之间设置了继承,或者您已将 1 个 DB 表拆分为 2 个 EDMX 实体,运行“从 DB 更新模型”不应覆盖所有内容!

    关于visual-studio-2012 - EF 中的 POCO 类未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15545469/

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