向模型 (edmx) 添加新表而不更新 Database First Entity Framework MVC 应用程序中的其他模型
Posted
技术标签:
【中文标题】向模型 (edmx) 添加新表而不更新 Database First Entity Framework MVC 应用程序中的其他模型【英文标题】:Adding a new table to model (edmx) without updating the other models in Database First Entity Framework MVC application 【发布时间】:2016-05-15 04:41:25 【问题描述】:我有一个使用 Entity Framework 6 Database First 方法的 MVC 5 应用程序。
到目前为止它运行良好,但我遇到了不受欢迎的行为。
如果我选择“从数据库更新模型”,选择“添加”选项卡,然后选择我要添加的表或视图并单击完成,它会添加我指定的表和/或视图没有问题。
但是,不受欢迎的行为是,即使我没有选择“刷新”选项卡,似乎每个模型都在自动刷新。
这意味着我的模型上的所有自定义属性都将被删除。
有没有办法指定只添加指定的表或视图而不刷新所有模型,或者如果刷新所有模型,保留我指定的属性?
Visual Studio 信息:Microsoft Visual Studio Professional 2013 版本 12.0.40629.00 更新 5 微软 .NET 框架 版本 4.5.51650
安装版本:专业版
这是一个错误还是预期用途?
谢谢
尼尔
【问题讨论】:
你是如何为你的模型添加属性的? 在模型类中手动输入它们。 @Neill,您不应该将它们添加到生成的模型类中,因为每次保存 EDMX 文件时都可以重新生成它们。但是,所有的类都是部分类,所以要添加自定义属性,您应该创建自己的部分类,在编译时将与自动生成的类结合。 部分类帮助的唯一方法如 ARdC 答案中链接的文章所示。 【参考方案1】:您确实需要使用部分类,以便您可以将 edmx 刷新到您的内心深处。
请查看 here 以获取有关该主题的精彩教程。
【讨论】:
被否决,因为: 1. 是的,该链接是针对 Database First 的,但指向有关“增强数据验证”的信息,而不是“部分类”。 2. 我以前看过这个教程,再读一遍,我看不出它如何解决我在自动生成的类上使用属性的问题。那篇文章会遇到和我一样的问题。 @Neill,你瞎了吗? "注意,每个类都被标记为分部类,并且每个类都匹配名称和命名空间作为自动生成的类。通过将元数据属性应用于分部类,您可以确保将数据验证属性应用于自动生成的类。 -生成的类。重新生成模型类时,这些属性不会丢失,因为元数据属性应用于未重新生成的部分类。" 抽出时间来学习教程。它没有谈论创建单独的部分类。它会引导您创建一个数据库,然后连接到它,因此是数据库优先的方法。是的,类的属性确实有效;直到您对数据库进行任何更改。噗,手动对文件所做的任何更改都消失了。因此,虽然您使用部分类的声明是正确的,但您提供的链接不能开箱即用。恐怕这里是 20/20 视力 @Neill - 看到我之前评论中的引用了吗?将其复制到剪贴板,打开链接并按 ctrl+f,然后按 ctrl+v。然后告诉我没有匹配。然后让合格的人员检查您的眼睛,并考虑报告您当前的光学专业人员的渎职和/或疏忽。如果他们对你这样做,可能会有无数其他人像你一样,认为他们有 20/20 的视力,但实际上有严重的视力障碍 当我错了时,我不觉得承认是丢脸的......男孩是我错了。抱歉,罗里,你确实是对的。吸取的教训是永远不要这么快地尝试证明别人错了,你不会只见树木不见森林。【参考方案2】:为了修改自动生成的类,建议使用部分类,这样当类再次刷新/生成时,您的更改不会丢失。
类和扩展其属性和方法的部分类的简单示例
// Assume this is autogenerated by EntityFramework
public class Book
public int Id get; set;
public string Title get; set;
// In a different file.cs
public partial class Book
[Required]
public string Author get; set;
public override ToString()
// Some code goes here
在该示例中,如果 EntityFramework 生成一个新的 Book 模型,则您通过部分类对该模型所做的更改根本不会丢失。
查看this article 了解更多关于部分类的信息,查看this question 了解更多关于使用部分类的优势的信息。
编辑:如果您需要为自动生成的类的现有属性添加属性this answer 也可能会帮助您。
【讨论】:
感谢 ARdC。我确实需要自动生成的类的属性,所以让-弗朗索瓦·博尚(Jean-François Beauchamp)在您提供的链接上的回答就成功了。以上是关于向模型 (edmx) 添加新表而不更新 Database First Entity Framework MVC 应用程序中的其他模型的主要内容,如果未能解决你的问题,请参考以下文章