Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# &引用;每个表中的列名必须是唯一的。”;在数据库更新期间_C#_Entity Framework_Ef Code First_Asp.net Core_Entity Framework Core - Fatal编程技术网

C# &引用;每个表中的列名必须是唯一的。”;在数据库更新期间

C# &引用;每个表中的列名必须是唯一的。”;在数据库更新期间,c#,entity-framework,ef-code-first,asp.net-core,entity-framework-core,C#,Entity Framework,Ef Code First,Asp.net Core,Entity Framework Core,我对ASP.NET还很陌生,不过这是我第一个使用ASP.NET核心的应用程序。我在创建迁移后更新数据库时遇到问题。当我键入命令:dotnet ef database update时,出现错误: 每个表中的列名必须是唯一的。列名“PortalUserId” 表中多次指定了“广告” 我认为问题在于我的模型结构,但我不知道我做错了什么。当我使用ASP.NETMVC5进行开发时,一切都很好 以下是我的模型(不需要案例实体): public类ApplicationDbContext:IdentityDbC

我对ASP.NET还很陌生,不过这是我第一个使用ASP.NET核心的应用程序。我在创建迁移后更新数据库时遇到问题。当我键入命令:
dotnet ef database update
时,出现错误:

每个表中的列名必须是唯一的。列名“PortalUserId” 表中多次指定了“广告”

我认为问题在于我的模型结构,但我不知道我做错了什么。当我使用ASP.NETMVC5进行开发时,一切都很好

以下是我的模型(不需要案例实体):

public类ApplicationDbContext:IdentityDbContext
{
公共应用程序DBContext(DbContextOptions

公共类BloggingContext:DbContext
{
公共博客上下文(DbContextOptions)
:基本(选项)
{ }
公共数据库集博客{get;set;}
公共DbSet Posts{get;set;}
}
公共类博客
{
public int BlogId{get;set;}
公共字符串Url{get;set;}
公共列表发布{get;set;}
}
公营职位
{
公共int PostId{get;set;}
公共字符串标题{get;set;}
公共字符串内容{get;set;}
public int BlogId{get;set;}
公共博客Blog{get;set;}
}

好了,伙计们,我找到了解决方案!需要做的就是将属性PortalUserId的类型从int改为string。然后所有东西都编译了,没有出现双字段


至少感谢您尝试帮助我!

请避免将来在标题中添加标签,除非这是问题/句子的自然部分,请参阅帮助中心:您的大小写似乎不一致。您是否尝试将属性命名为
PortalUserId
而不是
PortalUserId
(请注意,如果外键未定义,EF Core末尾的小写字母D将在默认情况下尝试向外键添加
Id
,db列不区分大小写。错误消息显示
PortalUserId
,但您的模型已
PortalUserId
我已将其更改为PortalUserId-数据库更新已完成,但在数据库结构中的确,我现在有PortalUserId和PortalUserId1。所以它似乎是重复的。我不知道为什么会发生这种事情。在MVC中,这种事情不会发生。你在你的
模型创建中有什么其他的东西吗?也看看你的迁移文件,看看以前发生了什么。如果你还在早期开发阶段,你也可以放弃它e数据库+迁移文件并创建新的初始迁移,或者如果需要更多工作,请回滚到第一次创建
PortalUserId
之前的点。我在
OnModelCreating
中没有更多内容。我一直在创建新数据库。但是,我找到了解决方案,这对我来说很奇怪。我刚刚删除了FK:PortaluserID,只留下PortalUserPortalUser属性-然后它被映射到数据库中的PortaluserID字段。只是我不明白为什么我上面提到的博客和帖子的示例将它翻了一番。。。。
public class ApplicationDbContext : IdentityDbContext
{
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
        : base(options)
    {
    }
    public DbSet<PortalUser> PortalUsers { get; set; }
    public DbSet<Advert> Adverts { get; set; }
    public DbSet<Category> Categories { get; set; }

    protected override void OnModelCreating(ModelBuilder builder)
    {
        base.OnModelCreating(builder);
        // Customize the ASP.NET Identity model and override the defaults if needed.
        // For example, you can rename the ASP.NET Identity table names and more.
        // Add your customizations after calling base.OnModelCreating(builder);
    }
}

public class Advert
{
    public int ID { get; set; }
    public string Title { get; set; }
    public int CategoryID { get; set; }
    public virtual Category Category { get; set; }
    public int PortalUserID { get; set; }
    public PortalUser PortalUser { get; set; }
}

public class PortalUser : IdentityUser
{
    public string FirstName { get; set; }
    public string Surname { get; set; }
    public ICollection<Advert> Adverts { get; set; }

}
    public class BloggingContext : DbContext
{
    public BloggingContext(DbContextOptions<BloggingContext> options)
        : base(options)
    { }

    public DbSet<Blog> Blogs { get; set; }
    public DbSet<Post> Posts { get; set; }
}

public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }

    public List<Post> Posts { get; set; }
}

public class Post
{
    public int PostId { get; set; }
    public string Title { get; set; }
    public string Content { get; set; }

    public int BlogId { get; set; }
    public Blog Blog { get; set; }
}