当前位置: 首页 > 知识库问答 >
问题:

移民没有像我希望的那样工作...sp.net实体框架

常自怡
2023-03-14

我正在学习这个教程。net电影教程,我的模型中有两个简单的文件。

 public class Movie
{
    public int ID { get; set; }

    [Required]
    public string Title { get; set; }


}

public class MovieDBContext : DbContext
{
    public DbSet<Movie> Movies { get; set; }


}

另一个是Visual Studio给我的帐户模型:

 public class UsersContext : DbContext
{
    public UsersContext()
        : base("DefaultConnection")
    {
    }

    public DbSet<UserProfile> UserProfiles { get; set; }
}

[Table("UserProfile")]
public class UserProfile
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int UserId { get; set; }
    public string UserName { get; set; }


}

问题是......如果我再加上一句话

 public int aaa { get; set; }

对于UserProfile类,我在迁移中没有得到任何更改。。。。这是因为迁移只更新MovieDBContext中的类。。。。因此,我必须补充如下内容:

public class MovieDBContext : DbContext
{
    public DbSet<Movie> Movies { get; set; }
    public DbSet<UserProfile> User{get;set} 

}

问题是,在另一个项目中,我试图更新会计模型,并尝试了这个解决方案,但它没有工作......有人知道其他解决办法吗?

共有3个答案

楚瑞
2023-03-14

实体框架将只迁移一个DbContext。时期目前没有办法解决这个问题。这意味着英孚需要处理的一切都必须在这个单一的环境中。

然而,这并不妨碍您为不同的目的在其他地方使用其他上下文。因此,在您的MovieDBContext中,继续添加您的UserProfile实体集:

public DbSet<UserProfile> User { get; set; }

然后,在其他上下文中,您只需1)确保它们与同一数据库交互,2)它们没有初始化策略,例如:

public class AccountsContext : DbContext
{
    public AccountsContext()
        : base("name=ConnectionStringNameHere")
    {
        Database.SetInitializer(null);
    }

    public DbSet<UserProfile> User { get; set; }
    ...
}

这将使EF将此上下文视为对现有数据库的映射,因此它不会尝试创建数据库表、迁移等。所有这些都将通过您的主上下文(在本例中为MoviDbContext)完成。

公良信然
2023-03-14

您应该将所有表放在一个DbContext类中。

然后一切都会正常工作。

赵朝
2023-03-14

我认为你的经历是一个“连接”问题。(请查看我前面的演练和连接链接)
迁移不会改变我的表(对于连接问题)
代码首先创建表

把它放在一个DbContext中——实际上不需要两个(至少我这么认为)。您只需在进行连接时“调整”连接即可。

具体来说,您的UserContext指定了一个连接(DefaultConnection)。另一个(Movie...)没有-这意味着另一个连接将被命名为MoviDbContext-它试图在您的配置文件中找到它-如果不成功-它使用默认的'提供者'来找到数据库-它在那里创建了一个新的数据库。虽然您的UserContext可能已经在. config中定义了一个连接,并且这个连接是有效的。

只需将所有内容移动到“UserContext”-或调整连接即可。见附件

注:

拥有多个DbContext-s就是所谓的多租户迁移——到目前为止(对于EF5)还不支持这种迁移——对于EF6,EF6中的每个数据库都有多个上下文。

它不能在同一个数据库中有“两个迁移表”,因为每个迁移/上下文都需要自己的迁移表。

对于“黑客”,您可以通过html" target="_blank">执行类似于addmigration-ConfigurationTypeName测试的操作,强制运行addmigration。迁移。MovieConfiguration InitialMovie——另一个单独使用——但这在单个项目中不起作用(它会抱怨迁移挂起或其他问题)——如果您移动到两个不同的项目,则在运行更新后,您会碰到“一个迁移表”的墙。

另一个解决方案是关闭迁移(一个),但我没有尝试过,也没有运行连接到两个数据库的两个上下文,如果您想在这两个数据库之间进行“通信”,那么您就不需要这样做。无论哪种方式-这只是纯粹的“学术目的”-它不是为你的情况。

 类似资料:
  • 这是我的设备 这是我的消息正文作者 我的问题是: 为什么结果似乎不正确?我被放在@JsonRootName(“Facility”)上,并且还启用了包装根特性 我错过了什么

  • 我正在使用wedriveri o 4.5: 我需要等到某个元素存在,如果它不存在,处理这种情况。 例如: 但如果页面上不存在元素,webdriver会将我的测试标记为失败,并显示消息:“超时10000毫秒。”。尝试减少运行时间或增加测试规格的超时时间(http://webdriver.io/guide/testrunner/timeouts.html); 如果回复promise,确保其得到解决 >

  • 这是我的方法compute(),它接受月数: 要提供上下文, 余额:是员工每月初获得的固定月薪 我的输入示例如下: 如果比尔·乔布斯(BillJobs)是余额为54K的员工,每年从银行获得0%和1.2%的年利率,计算时间将超过13个月。我的期望输出应该是: 其中706933.71的余额是在调用compute方法时计算出来的,但是我最终得到 13个月后的余额为705852.63。

  • 下面是一个类和log4j配置: $vi My.java $vi log4j2.xml 在日志/foo.bar.log中出现和消息。这是我所期望的。但是在日志/foo.log中什么都没有出现,我期望那里有消息。在控制台上也什么都没有出现,但是我期望消息。所以它没有像我预期的那样工作。那么我的错误是什么? 还有LogManager的论点。getLogger必须是记录器的名称。但我也看到了论点是类的例子

  • 我想使用查找从一个集合中获取一些数据并将其放入另一个集合中。 在localfield或foreignfield中写什么都不重要,因为它从player_game_stats中获取所有数据并将其插入player集合中的每个文档中。我想检查localfield和foreignField是否相等,但lookup不检查这一点。我对mongodb使用NoSqlBooster

  • 问题内容: 我有以下状态: 然后我更新状态: 由于setState是假设要合并的,所以我希望它是: 但是它吃掉了id,状态为: 这是预期的行为吗?仅更新嵌套状态对象的一个​​属性的解决方案是什么? 问题答案: 我认为不做递归合并。 您可以使用当前状态的值构造一个新状态,然后调用该状态: 我在这里使用过函数function(来自underscore.js库),通过创建状态的浅表副本来防止对该状态的现