C# 在Database First Entity Framework MVC应用程序中,在不更新其他模型的情况下向模型(edmx)添加新表

C# 在Database First Entity Framework MVC应用程序中,在不更新其他模型的情况下向模型(edmx)添加新表,c#,asp.net-mvc,entity-framework-6,C#,Asp.net Mvc,Entity Framework 6,我有一个MVC5应用程序,它使用EntityFramework6数据库优先的方法 到目前为止,它工作得很好,但我遇到了一个不想要的行为 如果选择“从数据库更新模型”,选择“添加”选项卡,然后选择要添加的表或视图并单击“完成”,则会添加我指定的表和/或视图,没有问题 然而,不必要的行为是,即使我没有选择“刷新”选项卡,似乎每个模型都会自动刷新 这意味着将删除模型上的所有自定义属性 有没有办法指定只添加指定的表或视图而不刷新所有模型,或者如果刷新所有模型,则保留我指定的属性 Visual Studi

我有一个MVC5应用程序,它使用EntityFramework6数据库优先的方法

到目前为止,它工作得很好,但我遇到了一个不想要的行为

如果选择“从数据库更新模型”,选择“添加”选项卡,然后选择要添加的表或视图并单击“完成”,则会添加我指定的表和/或视图,没有问题

然而,不必要的行为是,即使我没有选择“刷新”选项卡,似乎每个模型都会自动刷新

这意味着将删除模型上的所有自定义属性

有没有办法指定只添加指定的表或视图而不刷新所有模型,或者如果刷新所有模型,则保留我指定的属性

Visual Studio信息:Microsoft Visual Studio Professional 2013 版本12.0.40629.00更新5 Microsoft.NET框架 版本4.5.51650

安装版本:Professional

这是一个bug还是预期用途

谢谢


Neill

您确实需要使用分部类,这样您就可以将edmx刷新到您的核心内容


查找有关该主题的优秀教程。

为了修改自动生成的类,建议使用部分类,这样在再次刷新/生成类时,您所做的更改不会丢失

类和部分类在其属性和方法上展开的简单示例

// 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生成了一个新书模型,那么您通过分部类对该模型所做的更改将不会丢失

查看以获取有关分部类的更多信息以及有关使用分部类的优点的更多信息


编辑:如果需要将属性添加到自动生成类的现有属性中,可能也会有所帮助。

如何将属性添加到模型中?在模型类中手动键入属性。@Neill,您不应该将属性添加到生成的模型类中,因为每次保存EDMX文件时都可以重新生成属性。但是,所有的类都是分部类,因此要添加自定义属性,您应该创建自己的分部类,该分部类在编译时将与自动生成的分部类相结合。分部类帮助的唯一方式如ARdC答案上链接的文章所示。谢谢ARdC。我确实需要自动生成类的属性,因此Jean-François Beauchamp在您提供的链接上的回答起了作用。是的,该链接首先针对数据库,但指向有关“增强数据验证”的信息,而不是“部分类”。2.我以前看过这个教程,再次阅读它,我看不出它如何解决我在自动生成的类上使用属性的问题。那篇文章也会遇到和我一样的问题。@Neill,你瞎了吗?请注意,每个类都标记为分部类,并且每个类都与自动生成的类的名称和命名空间相匹配。通过将元数据属性应用于分部类,可以确保数据验证属性将应用于自动生成的类。重新生成时,这些属性不会丢失删除模型类,因为元数据属性应用于未重新生成的部分类。”花了一些时间来遵循教程。它没有提到创建单独的分部类。它引导您完成创建的数据库,然后连接到它,因此采用数据库优先的方法。是的,类上的属性起作用;直到您对数据库进行任何更改。如果是,手动对文件所做的任何更改都将消失。因此,尽管您使用分部类的语句是正确的,但您提供的链接并不是现成的。20/20愿景我在这里afraid@Neill-见我之前评论中的引用?将其复制到剪贴板上,打开链接并按ctrl+f,然后按ctrl+v。那就告诉我没有对手。然后让你的眼睛检查合格的人这次,并考虑报告你目前的光学专业人员的渎职和/或疏忽。如果他们这样对你,可能会有无数其他人和你一样,他们认为自己有20/20的视力,但事实上视力严重受损。我认为承认我错了并不羞耻。。。。我错了。抱歉,罗里,你确实是对的。从中学到的教训是,永远不要那么快地试图证明别人错了,你看不到森林里的树木。