entity-framework - 如果 EF 5,如何定义自定义命名约定

标签 entity-framework asp.net-mvc-4 entity-framework-5 naming-conventions

假设我有一个包含 1 个表的数据库,名为 Products .因此,我通过 Db First 方法并在 VS 2012 中使用 pluralize and singularize 创建了一个 EF 模型。选项。

因此,该模型创建了一个 Product实体对我来说,默认命名约定将此实体映射到 dbo.Products table 。

现在我想改变这种行为。事实上,我想创建一个自定义约定来映射 ProductModel实体到 dbo.Products table 。

这可能吗?!如果是这样,如何?

更新:我的目标是做...

如您所知,每当您从数据库更新模型时,如果它导致模型发生变化,自动生成的实体将被覆盖。

另一方面,我想将数据注释属性添加到实体属性,以便我可以使用它们来塑造我的 View ,并希望像以下插入一样简单地使用我的 DbContext:

public ActionResult Create(Product product)
    {
        if (ModelState.IsValid)
        {
            db.Products.Add(product);
            db.SaveChanges();
            return RedirectToAction("Index");
        }

        return View(product);
    }

问题是我的应用程序分析没有完成,数据库多次更改。所以,我需要从数据库更新模型,之后,我的所有属性都将被删除。

所以我决定创建一个 ProductModel类并复制 Product代码给它,并将 View 作为 View 模型传递给它。然后,当我想查询我的数据库时,我会得到一个异常,说明 dbo.ProductModels数据库中不存在名称...

提前致谢

最佳答案

默认情况下,数据库优先的方法总是将表名映射到同名的实体(可能是复数/单数化)。目前 EF 中没有规定通过约定或工具来调整它。您可以更改/调整/自定义您的模型 - 但如果您重新生成它,这些更改就会丢失。我不知道有任何工具/脚本/黑客以某种方式“保留”这些更改并在从数据库重新生成模型后重新应用它们。

如果您需要扩展生成的我建议使用这些是 的事实。部分 类 - 您可以在第二个物理文件中扩展生成的类:

把它写在一个单独的文件中,例如ProductExtension.cs :

public partial class Product
{
   // add your custom methods etc. here
}

构成该类的各种文件将合并到 中。一级由 C# 编译器为您提供。

如果需要向现有生成的类添加数据注释,可以使用 MetadataType(..) 属性 as shown in this SO question and its answers :

把它写在一个单独的文件中,例如ProductExtension.cs :
[MetadataType(typeof(ProductMetaData))]
public partial class Product
{
}

然后在另一个文件 ProductMetadata.cs 中为您的产品类定义元数据/数据注释, 像这样:
public class ProductMetaData
{
    [Required]
    public int RequestId {get;set;}
    //...
}

关于entity-framework - 如果 EF 5,如何定义自定义命名约定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17761810/

相关文章:

c# - EFCore 保存具有关系 ID 的实体

asp.net-mvc - ViewResult.ExecuteResult 花费太长时间

c# - Entity Framework 代码生成策略 - Nullable varchar 与 Non-Nullable varchar

c# - 法语口音在 asp.net MVC View 中未正确显示

entity-framework - Entity Framework 核心 : How to solve Introducing FOREIGN KEY constraint may cause cycles or multiple cascade paths

c# - MVC 4 - 在同一页面中显示单行的项目详细信息

asp.net-mvc-4 - Spring.Net 抛出异常 : Request is not available in this context

c# - 将 Entity Framework 查询结果放入 DataTable 的最快方法是什么?

dependency-injection - ActionFilterAttribute ninject 注入(inject) - DbContext 已被释放

entity-framework - EF Core 中使用注入(inject) DbContext 的并行异步调用的最佳实践是什么?