【问题标题】:How to compare POCO class with Database?如何比较 POCO 类和数据库?
【发布时间】:2013-04-04 13:07:33
【问题描述】:

我需要将我的 POCO 类中的内容与我的数据库进行比较。 我目前正在使用Microsoft RoslynMicrosoft.SqlServer.SMO 并在我看来“大致”比较数据。它运行良好,但我想知道是否有更好的方法。

今天我必须使用 Roslyn 编译文件,加载数据库信息并比较我想要的。

假设我有这个POCO 文件:

[Table("XPTO", Schema="ASD")]
public class MyPoco 
{
    public int PropId {get; set;}
    public virtual Prop Prop {get; set;}
    public DateTime? MyDate {get; set;}
}

我也有表格信息。我想看看我的POCO 类(MyDate)中可以为空的内容在我的数据库中是否可以为空,反之亦然。我想看看我的数据库是否有一个Foreign Key 到表Props 以及它是否像我的POCO 那样不可为空。

正如我所说,它今天已经可以工作了,我只是想重写代码以使用更有效的方式来维护。

EntityFramework 是否提供某种 API 或任何东西?

系统信息

SQL Server 2008 R2
Entity Framework 4.1
C# 4.0

谢谢();

【问题讨论】:

    标签: c# entity-framework entity-framework-4 smo roslyn


    【解决方案1】:

    如果我没看错您的问题 - 您是否需要一些 API 在运行时从 DbContext 或 EF/code-first 获取 relationshiops 和其他 metadata 信息?

    到目前为止我见过的最好的——我们两个能做的最好的就是这个......

    How I can read EF DbContext metadata programmatically?

    ...看看这是否对您有帮助...

    如果您碰巧拥有,欢迎您在那里发帖 一些新的和重要的信息(我们制作它的目的是作为一个 像这样的主题的一站式问题)。

    【讨论】:

    • 感谢您的回答,这可能是一个开始的地方。这基本上就是我需要的,除了我需要获取实例化上下文之间的差异,甚至是 POCO 文件本身,因为我可以使用 Roslyn,并与数据库进行比较。我会看看你的答案,看看这是否对我有用。再次感谢。
    • 不客气。好吧,这是当前的“运行时”快照——那些应该“对应”到 Db。但是对于“真实 Db”状态 - 您需要查询 Db - 使用系统表来获取表、关系、字段等并构建您的 Left 模型 (Db) - 然后与 Right 模型进行比较(你的代码一)。这就是我使用 Db 代码生成器稍微简化的内容,您可以分层进行比较,至少是这样的:)
    • 我刚刚深入了解了您的方法,但看到您实例化了上下文,我决定不这样做。问题是我检查了 poco 文件并使用了我与表中的信息进行比较的属性。该应用程序非常大,使用这种方法我需要处理几个不时更改的自定义 DLL。无论如何,你的回答让我思考,所以再次感谢你。
    • 不客气 - 每个案例都是特定的,你最清楚(如果有人使用流畅的配置,你就不能依赖属性,就像我大部分时间一样 - 很多事情都可以'没有它就可以完成 - 如果这就是你所说的属性)。您仍然应该关闭问题 - 如果这还不够合适,请提出您自己的答案。干杯。
    猜你喜欢
    • 1970-01-01
    • 2021-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多