我首先使用实体框架代码,直到最近才一直使用数据库迁移更新数据库...
我已经为AspNetUser表添加了一个新属性
public partial class AspNetUser
{
....
public ICollection<Feed> Feeds { get; set; }
}
这是我的新表
public class Feed
{
public int Id { get; set; }
public string UserId { get; set; }
public AspNetUser User { get; set; }
public MessageType Type { get; set; }
public string Data { get; set; }
public DateTime DateCreated { get; set; }
}
这是生成的DBMigration脚本
public override void Up()
{
CreateTable(
"dbo.Feeds",
c => new
{
Id = c.Int(nullable: false, identity: true),
UserId = c.String(nullable: false, maxLength: 128),
Type = c.Int(nullable: false),
Data = c.String(),
DateCreated = c.DateTime(nullable: false),
})
.PrimaryKey(t => t.Id)
.ForeignKey("dbo.AspNetUsers", t => t.UserId, cascadeDelete: true)
.Index(t => t.UserId);
}
在Context类中:
modelBuilder.Entity<Feed>().HasRequired(x => x.User).WithMany(x => x.Feeds).HasForeignKey(x => x.UserId);
这在localhost上创建了表,但是当我在staging上部署并运行迁移时,我得到的错误是:
专栏&#39; dbo.AspNetUsers.Id&#39;不是与引用列&#39; Feeds.UserId&#39;相同的排序规则。在外键&#39; FK_dbo.Feeds_dbo.AspNetUsers_UserId&#39;。 无法创建约束或索引。查看以前的错误。
我必须做什么......我已经采用了代码优先方法,认为这会更容易,但这真的令人沮丧。
注意:我使用的是sql Azure
答案 0 :(得分:1)
两列“dbo.AspNetUsers.Id”和“Feeds.UserId”的排序规则应该相同,为了使它们相同,您可以使用下面的示例代码修改其中一列的排序规则:
context.Database.SqlCommand(“ALTER TABLE MyTable ALTER COLUMN MyColumn VARCHAR(50)COLLATE SQL_Latin1_General_CP1_CS_AS NULL”);
希望这有帮助。
此致
Alberto Morillo
答案 1 :(得分:0)
这就是我解决问题的方法,但绝不是我想要的解决方案。
数据也来了,所以没有损失。
我尝试了一些数据库迁移,它们似乎也有效。