【问题标题】:Existing Entity gets update when update entity data modal from database after create new table, how to stop it创建新表后从数据库更新实体数据模式时现有实体得到更新,如何停止它
【发布时间】:2015-11-25 03:12:33
【问题描述】:

实际上我是实体框架工作的新手,所以我有一个名为 AllUsers 的表,当我更新实体模式时,它会在模式中创建名为“AllUsers”实体的实体,然后我在这个实体中添加了新属性,然后当我创建数据库中的新表并再次更新实体数据模式,使用新创建的表然后我的“AllUsers”实体得到更新并删除额外添加的属性。那么我该如何停止更新已修改的实体。

【问题讨论】:

  • 你能详细说明你想要什么吗?
  • 看,当我在 X 实体中添加 [显示名称] 属性,然后在数据库中创建新表并使用新创建的表更新我的实体数据模式时,我的 X 实体 [显示名称] 被删除。那么如何停止或以其他方式在实体模式中拥有带有新表的实体。
  • 好的,所以我的理解是......您希望在更新模型时不会删除您的 [显示名称] 属性?我说的对吗?
  • 是的,确切地说,还有额外添加的实体,例如,我添加了任何其他类的 IEnumerable 列表。
  • 你试过我的答案了吗??

标签: asp.net-mvc entity-framework-6


【解决方案1】:

为该特定表手动定义模型和映射文件 有关更多详细信息,请查看以下链接 https://msdn.microsoft.com/library/bb399785(v=vs.100).aspx

【讨论】:

  • 谢谢,但没有其他方法可以做到这一点.. 因为它看起来并不简单,而且对于庞大的数据库来说它不可行..
【解决方案2】:

您可以创建一个 MetaData 类并在此 MetaData.cs 文件中定义所有模型类的所有属性,如下所示:

public class AllUsersMetaData
{
    [Required]
    [Display(Name = "Code")]
    [Remote("codelength", "Rules", AdditionalFields = "S1,S2", HttpMethod = "POST")]
    public string Code { get; set; }

    [Required]
    [Display(Name = "Name")]
    public string Name { get; set; }
}

public class NewUserMetaData
{
    [Display(Name = "Document Type")]
    public string Type { get; set; }
    [Required]
    public string Tag { get; set; }
}

然后为部分类创建另一个 .cs 文件,并根据您的模型编写如下:

[MetadataType(typeof(AllUsersMetaData))]
public partial class AllUsers
{
}

[MetadataType(typeof(NewUserMetaData))]
public partial class NewUser
{
}

将这两个文件保存在与您的 EDMX 相同的命名空间中。并且部分类中的类名称必须与 EDMX 生成的模型类完全相同。这样,当您从数据库中更新模型时,您的属性不会被删除。

【讨论】:

    猜你喜欢
    • 2017-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 2011-11-14
    • 1970-01-01
    相关资源
    最近更新 更多