我有一个项目,其中包含 DomainClasses C# 库、使用 Domian 类的 DataAccess C# 库,最后是使用 DataLayer 的 WebAPI。另外,我有一个 Amazon SQL RDS 数据库。
在我的 Controller 中创建上下文后,数据库不会创建与我的域类相关的表,如果我使用控制台管理器并在 Web API 上启用迁移,它会向我显示“未找到上下文类型”在程序集中“WebApi””
我在 API 的 Web 配置上连接了 AWS RDS 数据库,并且将其命名为与数据层中的上下文相同的名称。我是 EF 的新手。
每次运行应用程序时,我都期望数据库有表,但那里没有任何反应。
谢谢
我的这部分代码
域类:
public class SensorSession
{
public int Id { get; set; }
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
public virtual UserTest User { get; set; }
public virtual List<SensorTest> SensorsCollected { get; set; }
}
public class SensorTest
{
public int Id { get; set; }
public int HeartRate { get; set; }
public int SkinConductivity { get; set; }
public int Temperature {get; set;}
public int Movement { get; set; }
public int IndoorPositioning { get; set; }
public DateTime CollectedDateTime { get; set; }
}
public class UserTest
{
public int Id { get; set; }
public string Name { get; set; }
public int ProviderId { get; set; }
}
数据层
namespace DataLayer
{
public class TestDataContext:DbContext
{
public DbSet<SensorSession> SensorSessions { get; set; }
public DbSet<SensorTest> SensorTests { get; set; }
public DbSet<UserTest> UserTests { get; set; }
}
}
public class TestDataInitialializer : DropCreateDatabaseAlways<TestDataContext>
{
protected override void Seed(TestDataContext context)
{
var testUser = new UserTest
{
Name = "Denis",
ProviderId = 1
};
var sensorTest = new SensorTest
{
CollectedDateTime = DateTime.Now,
HeartRate = 74,
IndoorPositioning = 1,
Movement = 2,
SkinConductivity = 3,
Temperature = 30
};
new List<SensorSession>
{ new SensorSession
{
StartDate = DateTime.Now,
EndDate = DateTime.Now,
User = testUser,
SensorsCollected = new List<SensorTest> { sensorTest }
}
}.ForEach(b => context.SensorSessions.Add(b));
base.Seed(context);
}
}
WEB API
<connectionStrings>
<add name="TestDataContext" providerName="System.Data.SqlClient" connectionString="my aws rds link"/>
</connectionStrings>
全局为
protected void Application_Start()
{
Database.SetInitializer(new TestDataInitialializer());
...
}
最佳答案
除非您从上下文中执行一些与数据库交互的操作,否则初始化不会发生。查询、savechanges 甚至直接执行 SQL 命令之一。还有一个命令Database.Initialize,您可以使用它通过传入force参数true来强制它。
关于c# - Entity Framework 不更新 Amazon RDS SQL 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20320145/