【问题标题】:Database handling using Entity Framework使用实体框架处理数据库
【发布时间】:2015-07-09 12:57:59
【问题描述】:

我有两个关于使用实体框架处理数据库的问题。我正在使用 SQL Server 2012/14 web api 2 (VS 2012/13) 但这没关系,因为我的问题是关于 EF6 的代码优先方法。在代码优先的方法中,如果表不存在,EF 会为您创建它(EF 的真棒功能)。

1.) 通常当 EF 创建表时,它使用 nvarchar 作为字符串数据类型,但我需要使用 varchar。如何在 EF 中指定? (也适用于其他数据类型?)

2.) 我还需要使用 EF 创建存储过程(如果它在 DB 中不存在)。还有我如何从 EF 调用它?存储过程接受输入参数并给出输出记录。

如果模型或逻辑发生任何变化,应自动反映在 DB 中。 [非常重要]

要求:请保持您对解释的理解程度超级简单。我刚刚看了一些 YouTube 视频并试图理解它并在我的项目中实施它。但我不想只是复制代码,我想理解它,所以请为每一行提供解释。多种解决方案将不胜感激。 (我的意思是 Data Annotation 和 Fluent API)

我最后的选择: 我正在考虑创建脚本并在“up”函数中执行它(迁移发生并创建所有 SQL 对象) 但是这种方法的问题是,如果我的模型有任何变化,我也必须在该脚本中反映相同的变化,因为它是硬编码的。当我别无选择时,我将使用此选项。我还没有尝试过这个选项,所以我可能完全错了。

提前致谢。

【问题讨论】:

标签: c# entity-framework entity-framework-6


【解决方案1】:

1) 如果你想在你的表的实际列中指定要使用的数据库类型,这里是它的代码(使用 Fluent API):

modelbuilder.Entity<Department>()   
    .Property(p => p.Name)   
    .HasColumnType("varchar");

来源:https://msdn.microsoft.com/en-us/data/jj591617#1.10

2) 如果您希望 Entity Framework 生成用于创建所需存储过程的脚本,请查看这篇文章:https://msdn.microsoft.com/en-us/data/dn468673。我认为从那里复制源代码并将其粘贴到这里不是一个好主意,所以如果您有任何具体问题,请随时提出。

如果您想自己创建存储过程脚本,然后使用 Entity Framework 调用它,请查看这篇文章:https://msdn.microsoft.com/en-us/data/jj557860注意:此选项往往会产生与之相关的维护成本。但是,如果 Entity Framework 生成的存储过程不如您的存储过程应该如何编写的版本那么高效,那么它是值得的。

再次,请随时在这里提出任何具体问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-11
    • 1970-01-01
    • 1970-01-01
    • 2012-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多